1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/reference/ev/ev.xml
2026-01-18 22:20:48 +00:00

803 lines
28 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b4fbf4434abeca44c58575ff3967e5640f7877d5 Maintainer: takagi Status: ready -->
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.ev" role="class">
<title>Ev クラス</title>
<titleabbrev>Ev</titleabbrev>
<partintro>
<!-- {{{ Ev intro -->
<section xml:id="ev.intro">
&reftitle.intro;
<simpara>
Ev は静的クラスで、デフォルトのループへのアクセスや各種共通操作へのアクセスを提供します。
</simpara>
</section>
<!-- }}} -->
<section xml:id="ev.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass>
<classname>Ev</classname>
</ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<modifier>final</modifier>
<classname>Ev</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Constants;</classsynopsisinfo>
<!--{{{-->
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-auto">Ev::FLAG_AUTO</varname>
<initializer>0</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-noenv">Ev::FLAG_NOENV</varname>
<initializer>16777216</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-forkcheck">Ev::FLAG_FORKCHECK</varname>
<initializer>33554432</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-noinotify">Ev::FLAG_NOINOTIFY</varname>
<initializer>1048576</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-signalfd">Ev::FLAG_SIGNALFD</varname>
<initializer>2097152</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.flag-nosigmask">Ev::FLAG_NOSIGMASK</varname>
<initializer>4194304</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.run-nowait">Ev::RUN_NOWAIT</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.run-once">Ev::RUN_ONCE</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.break-cancel">Ev::BREAK_CANCEL</varname>
<initializer>0</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.break-one">Ev::BREAK_ONE</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.break-all">Ev::BREAK_ALL</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.minpri">Ev::MINPRI</varname>
<initializer>-2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.maxpri">Ev::MAXPRI</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.read">Ev::READ</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.write">Ev::WRITE</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.timer">Ev::TIMER</varname>
<initializer>256</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.periodic">Ev::PERIODIC</varname>
<initializer>512</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.signal">Ev::SIGNAL</varname>
<initializer>1024</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.child">Ev::CHILD</varname>
<initializer>2048</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.stat">Ev::STAT</varname>
<initializer>4096</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.idle">Ev::IDLE</varname>
<initializer>8192</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.prepare">Ev::PREPARE</varname>
<initializer>16384</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.check">Ev::CHECK</varname>
<initializer>32768</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.embed">Ev::EMBED</varname>
<initializer>65536</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.custom">Ev::CUSTOM</varname>
<initializer>16777216</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.error">Ev::ERROR</varname>
<initializer>2147483648</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-select">Ev::BACKEND_SELECT</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-poll">Ev::BACKEND_POLL</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-epoll">Ev::BACKEND_EPOLL</varname>
<initializer>4</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-kqueue">Ev::BACKEND_KQUEUE</varname>
<initializer>8</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-devpoll">Ev::BACKEND_DEVPOLL</varname>
<initializer>16</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-port">Ev::BACKEND_PORT</varname>
<initializer>32</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-all">Ev::BACKEND_ALL</varname>
<initializer>63</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="ev.constants.backend-mask">Ev::BACKEND_MASK</varname>
<initializer>65535</initializer>
</fieldsynopsis>
<!--}}}-->
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ev')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])"/>
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ Ev constants -->
<section xml:id="ev.constants">
&reftitle.constants;
<para xml:id="ev.constants.loop-flags">
ループを作るときに渡すフラグ
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.flag-auto">
<term>
<constant>Ev::FLAG_AUTO</constant>
</term>
<listitem>
<simpara>
デフォルトのフラグの値。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noenv">
<term>
<constant>Ev::FLAG_NOENV</constant>
</term>
<listitem>
<simpara>
このフラグを使う (あるいは setuid や setgid でプログラムを実行する) と、
<literal>libev</literal> は環境変数
<varname>LIBEV_FLAGS</varname> を見ません。
それ以外の場合 (デフォルト) は、
<varname>LIBEV_FLAGS</varname> が見つかった場合は
その内容でフラグを上書きします。パフォーマンステストやバグの調査のときに有用です。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-forkcheck">
<term>
<constant>Ev::FLAG_FORKCHECK</constant>
</term>
<listitem>
<simpara>
libev が繰り返しのたびにフォークをチェックするようにします。毎回手動で
<methodname>EvLoop::fork</methodname> を呼ぶことがなくなります。
これを実現するために、ループ内での繰り返しの旅に
<literal>getpid()</literal> を呼んでいます。
そのため、繰り返しの回数が増えるとイベントループがスローダウンするかもしれませんが、
通常は気になるほどではありません。このフラグの設定を上書きしたり、
環境変数 <varname>LIBEV_FLAGS</varname> で指定したりすることはできません。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noinotify">
<term>
<constant>Ev::FLAG_NOINOTIFY</constant>
</term>
<listitem>
<simpara>
このフラグを指定すると、
<literal>libev</literal>
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_stat_code_did_the_file_attri">ev_stat</link>
ウォッチャーに
<literal>inotify</literal> API を使わなくなります。
このフラグは inotify ファイルディスクリプタを節約するのに便利です。
これを使わなければ、<literal>ev_stat</literal>
ウォッチャーを使ったループのたびに
<literal>inotify</literal>
ハンドルをひとつずつ消費することになります。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-signalfd">
<term>
<constant>Ev::FLAG_SIGNALFD</constant>
</term>
<listitem>
<simpara>
このフラグを指定すると、
<literal>libev</literal>
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_signal_code_signal_me_when_a">ev_signal</link>
(および
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_child_code_watch_out_for_pro">ev_child</link>
) ウォッチャーに
<literal>signalfd</literal> API を使おうとします。
この API はシグナルを同期的に配送し、高速に処理したり
キューに入ったシグナルデータを取得できるようにしたりします。
また、スレッドを使ったときのシグナル処理も、
スレッド内でシグナルが適切にブロックされている限りはシンプルになります。
デフォルトでは <literal>signalfd</literal> を使いません。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-nosigmask">
<term>
<constant>Ev::FLAG_NOSIGMASK</constant>
</term>
<listitem>
<simpara>
このフラグを指定すると、
<literal>libev</literal> はシグナルのマスクを変更しないようにします。
具体的には、シグナルが受信されるまではブロックしないようになるということです。
</simpara>
<simpara>
これは、自前のシグナル処理をするときに便利です。
また、特定のスレッドでだけシグナルを処理するという場合にも有用です。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.run-flags">
<methodname>Ev::run</methodname>
あるいは
<methodname>EvLoop::run</methodname>
に渡すフラグ
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.run-nowait">
<term>
<constant>Ev::RUN_NOWAIT</constant>
</term>
<listitem>
<simpara>
イベントループが新しいイベントを探し、
新しいイベントや未処理のイベントを処理するけれども、
もしイベントが見つからない場合は、最初のループですぐに呼び出し元に制御を戻します。
イベントを待つためにプロセスをブロックしたりはしません。
これは、時間のかかる計算をしているときのポーリングなどに便利です。
プログラムの動きを止めることなく新しいイベントを処理できます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.run-once">
<term>
<constant>Ev::RUN_ONCE</constant>
</term>
<listitem>
<simpara>
イベントループが (必要なら待ち続けてでも) 新しいイベントを探し、
その新しいイベントや未処理のイベントを処理します。
少なくとも一つのイベントがやってくるまで
(libev 自身のイベント間隔になるでしょう。
そのため、ユーザー低位のコールバックが呼ばれる保証はありません) プロセスをブロックし
ループ処理の終了後に呼び出し元に制御を戻します。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.break-flags">
<methodname>Ev::stop</methodname>
あるいは
<methodname>EvLoop::stop</methodname>
に渡すフラグ
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.break-cancel">
<term>
<constant>Ev::BREAK_CANCEL</constant>
</term>
<listitem>
<simpara>
ブレーク操作をキャンセルします。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-one">
<term>
<constant>Ev::BREAK_ONE</constant>
</term>
<listitem>
<simpara>
一番内側の
<methodname>Ev::run</methodname>
(あるいは
<methodname>EvLoop::run</methodname>
) の呼び出しを返します。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-all">
<term>
<constant>Ev::BREAK_ALL</constant>
</term>
<listitem>
<simpara>
ネストしたすべての
<methodname>Ev::run</methodname>
(あるいは
<methodname>EvLoop::run</methodname>
) の呼び出しを返します。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-pri">
ウォッチャーの優先度
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.minpri">
<term>
<constant>Ev::MINPRI</constant>
</term>
<listitem>
<simpara>
最小の優先度。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.maxpri">
<term>
<constant>Ev::MAXPRI</constant>
</term>
<listitem>
<simpara>
最大の優先度。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-revents">
受信したイベントのビットマスク
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.read">
<term>
<constant>Ev::READ</constant>
</term>
<listitem>
<simpara>
<classname>EvIo</classname>
ウォッチャーが読み込み可能になったときのファイルディスクリプタ。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.write">
<term>
<constant>Ev::WRITE</constant>
</term>
<listitem>
<simpara>
<classname>EvIo</classname>
ウォッチャーが書き込み可能になったときのファイルディスクリプタ。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.timer">
<term>
<constant>Ev::TIMER</constant>
</term>
<listitem>
<simpara>
<classname>EvTimer</classname>
ウォッチャーがタイムアウトしました。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.periodic">
<term>
<constant>Ev::PERIODIC</constant>
</term>
<listitem>
<simpara>
<classname>EvPeriodic</classname>
ウォッチャーがタイムアウトしました。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.signal">
<term>
<constant>Ev::SIGNAL</constant>
</term>
<listitem>
<simpara>
<methodname>EvSignal::__construct</methodname>
のコンストラクタで指定したシグナルを受信しました。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.child">
<term>
<constant>Ev::CHILD</constant>
</term>
<listitem>
<simpara>
<methodname>EvChild::__construct</methodname>
のコンストラクタで指定した
<parameter>pid</parameter>
が、状態の変更を受信しました。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.stat">
<term>
<constant>Ev::STAT</constant>
</term>
<listitem>
<simpara>
<classname>EvStat</classname>
ウォッチャーで指定したパスが、その属性を変更しました。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.idle">
<term>
<constant>Ev::IDLE</constant>
</term>
<listitem>
<simpara>
他のウォッチャーが何もすることがなくなったときに、
<classname>EvIdle</classname>
ウォッチャーが動作します。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.prepare">
<term>
<constant>Ev::PREPARE</constant>
</term>
<listitem>
<simpara>
すべての
<classname>EvPrepare</classname>
ウォッチャーが、
<methodname>Ev::run</methodname>
の開始前に起動しました。つまり、
イベントループがスリープしたり新しいイベントのポーリングをしたりする直前に
<classname>EvPrepare</classname>
ウォッチャーが起動するということになります。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.check">
<term>
<constant>Ev::CHECK</constant>
</term>
<listitem>
<simpara>
すべての
<classname>EvCheck</classname>
ウォッチャーが、
<methodname>Ev::run</methodname>
が新しいイベントをとりまとめた直後
(ただし受信したイベントのコールバックをキューに入れる前)
にキューに入ります。つまり、
イベントループ内で優先度が同じ (あるいはより低い) ウォッチャーより前に
<classname>EvCheck</classname> ウォッチャーが起動するということになります。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.embed">
<term>
<constant>Ev::EMBED</constant>
</term>
<listitem>
<simpara>
<classname>EvEmbed</classname>
で指定した埋め込みイベントループのウォッチャーが注目する必要があります。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.custom">
<term>
<constant>Ev::CUSTOM</constant>
</term>
<listitem>
<simpara>
まだ
<literal>libev</literal>
で送信したりそれ以外の使いかたをしたりはしていませんが、
<literal>libev</literal>
ユーザーが (<methodname>EvWatcher::feed</methodname> などで)
ウォッチャーに通知するために使えます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.error">
<term>
<constant>Ev::ERROR</constant>
</term>
<listitem>
<simpara>
指定されていないエラーが発生し、ウォッチャーが停止しました。
これが発生する原因として考えられるのは、
<literal>libev</literal> がメモリ不足でウォッチャーをきちんと開始できなかった場合や
ファイルディスクリプタが閉じてしまった場合などがあります。
<literal>libev</literal> は、これらに関してはアプリケーションのバグとみなします。
詳細は
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ANATOMY_OF_A_WATCHER_CONTENT">ANATOMY
OF A WATCHER</link>
を参照ください。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-backends">
バックエンドのフラグ
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.backend-select">
<term>
<constant>Ev::BACKEND_SELECT</constant>
</term>
<listitem>
<simpara>
<literal>select(2) バックエンド</literal>
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-poll">
<term>
<constant>Ev::BACKEND_POLL</constant>
</term>
<listitem>
<simpara>
<literal>poll(2) バックエンド</literal>
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-epoll">
<term>
<constant>Ev::BACKEND_EPOLL</constant>
</term>
<listitem>
<simpara>
Linux 限定の
<literal>epoll(7)</literal>
バックエンド。2.6.9 以前のカーネルでもそれ以降のカーネルでも使えます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-kqueue">
<term>
<constant>Ev::BACKEND_KQUEUE</constant>
</term>
<listitem>
<simpara>
<literal>kqueue</literal>
バックエンド。大半の BSD システムで利用します。
<classname>EvEmbed</classname> ウォッチャーを使って、
kqueue バックエンドのループを別のループに埋め込むことができます。
たとえば、
<literal>kqueue</literal> バックエンドのループを作って、
それをソケットに対してだけ使うこともできます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-devpoll">
<term>
<constant>Ev::BACKEND_DEVPOLL</constant>
</term>
<listitem>
<simpara>
Solaris 8 バックエンド。現時点では未実装です。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-port">
<term>
<constant>Ev::BACKEND_PORT</constant>
</term>
<listitem>
<simpara>
Solaris 10 のイベントポート機構で、規模が大きくなっても対応できます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-all">
<term>
<constant>Ev::BACKEND_ALL</constant>
</term>
<listitem>
<simpara>
壊れているものも含めて、すべてのバックエンドを試します。
これを明示的に使うことは推奨しません。ビット演算子を使って、
<constant>Ev::BACKEND_ALL</constant>
&amp; ~
<constant>Ev::BACKEND_KQUEUE</constant>
のようにするか、
<methodname>Ev::recommendedBackends</methodname>
を使うか、あるいは何もバックエンドを指定しないようにしましょう。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-mask">
<term>
<constant>Ev::BACKEND_MASK</constant>
</term>
<listitem>
<simpara>
これはバックエンドではなく、
<parameter>flags</parameter> の中のすべてのバックエンドビットをマスクするものです。
たとえば、環境変数
<varname>LIBEV_FLAGS</varname>
を変更するときに使います。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
デフォルトのループの場合は、モジュールの初期化時に
<literal>Ev</literal>
(もし使えれば) <literal>pthread_atfork</literal> を使って
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#FUNCTIONS_CONTROLLING_EVENT_LOOPS_CO">ev_loop_fork</link>
の呼び出しを登録します。
</simpara>
</note>
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
<classname>Ev</classname> クラスには、
<emphasis>デフォルトのイベントループ</emphasis> にアクセスするメソッドが用意されています
(<methodname>Ev::iteration</methodname><methodname>Ev::depth</methodname> など)。
<emphasis>カスタムループ</emphasis>
(<methodname>EvLoop::__construct</methodname> で作ったもの)
の場合、これらの値にアクセスするには
<classname>EvLoop</classname> クラスのプロパティやメソッドを使います。
</simpara>
<simpara>
デフォルトのイベントループ自体のインスタンスを取得するには
<methodname>EvLoop::defaultLoop</methodname>
メソッドを使います。
</simpara>
</note>
</section>
<!-- }}} -->
</partintro>
&reference.ev.entities.ev;
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->