Ev クラス
(PECL ev >= 0.2.0)
はじめに
Ev は静的クラスで、デフォルトのループへのアクセスや各種共通操作へのアクセスを提供します。
クラス概要
定義済み定数
ループを作るときに渡すフラグ
-
Ev::FLAG_AUTO
-
デフォルトのフラグの値。
-
Ev::FLAG_NOENV
-
このフラグを使う (あるいは setuid や setgid でプログラムを実行する) と、
libev
は環境変数 LIBEV_FLAGS を見ません。 それ以外の場合 (デフォルト) は、 LIBEV_FLAGS が見つかった場合は その内容でフラグを上書きします。パフォーマンステストやバグの調査のときに有用です。 -
Ev::FLAG_FORKCHECK
-
libev が繰り返しのたびにフォークをチェックするようにします。毎回手動で EvLoop::fork() を呼ぶことがなくなります。 これを実現するために、ループ内での繰り返しの旅に
getpid()
を呼んでいます。 そのため、繰り返しの回数が増えるとイベントループがスローダウンするかもしれませんが、 通常は気になるほどではありません。このフラグの設定を上書きしたり、 環境変数 LIBEV_FLAGS で指定したりすることはできません。 -
Ev::FLAG_NOINOTIFY
-
このフラグを指定すると、
libev
は » ev_stat ウォッチャーにinotify
API を使わなくなります。 このフラグは inotify ファイルディスクリプタを節約するのに便利です。 これを使わなければ、ev_stat
ウォッチャーを使ったループのたびにinotify
ハンドルをひとつずつ消費することになります。 -
Ev::FLAG_SIGNALFD
-
このフラグを指定すると、
libev
は » ev_signal (および » ev_child ) ウォッチャーにsignalfd
API を使おうとします。 この API はシグナルを同期的に配送し、高速に処理したり キューに入ったシグナルデータを取得できるようにしたりします。 また、スレッドを使ったときのシグナル処理も、 スレッド内でシグナルが適切にブロックされている限りはシンプルになります。 デフォルトではsignalfd
を使いません。 -
Ev::FLAG_NOSIGMASK
-
このフラグを指定すると、
libev
はシグナルのマスクを変更しないようにします。 具体的には、シグナルが受信されるまではブロックしないようになるということです。これは、自前のシグナル処理をするときに便利です。 また、特定のスレッドでだけシグナルを処理するという場合にも有用です。
Ev::run() あるいは EvLoop::run() に渡すフラグ
-
Ev::RUN_NOWAIT
-
イベントループが新しいイベントを探し、 新しいイベントや未処理のイベントを処理するけれども、 もしイベントが見つからない場合は、最初のループですぐに呼び出し元に制御を戻します。 イベントを待つためにプロセスをブロックしたりはしません。 これは、時間のかかる計算をしているときのポーリングなどに便利です。 プログラムの動きを止めることなく新しいイベントを処理できます。
-
Ev::RUN_ONCE
-
イベントループが (必要なら待ち続けてでも) 新しいイベントを探し、 その新しいイベントや未処理のイベントを処理します。 少なくとも一つのイベントがやってくるまで (libev 自身のイベント間隔になるでしょう。 そのため、ユーザー低位のコールバックが呼ばれる保証はありません) プロセスをブロックし ループ処理の終了後に呼び出し元に制御を戻します。
Ev::stop() あるいは EvLoop::stop() に渡すフラグ
-
Ev::BREAK_CANCEL
-
ブレーク操作をキャンセルします。
-
Ev::BREAK_ONE
-
一番内側の Ev::run() (あるいは EvLoop::run() ) の呼び出しを返します。
-
Ev::BREAK_ALL
-
ネストしたすべての Ev::run() (あるいは EvLoop::run() ) の呼び出しを返します。
ウォッチャーの優先度
-
Ev::MINPRI
-
最小の優先度。
-
Ev::MAXPRI
-
最大の優先度。
受信したイベントのビットマスク
-
Ev::READ
-
EvIo ウォッチャーが読み込み可能になったときのファイルディスクリプタ。
-
Ev::WRITE
-
EvIo ウォッチャーが書き込み可能になったときのファイルディスクリプタ。
-
Ev::TIMER
-
EvTimer ウォッチャーがタイムアウトしました。
-
Ev::PERIODIC
-
EvPeriodic ウォッチャーがタイムアウトしました。
-
Ev::SIGNAL
-
EvSignal::__construct() のコンストラクタで指定したシグナルを受信しました。
-
Ev::CHILD
-
EvChild::__construct() のコンストラクタで指定した
pid
が、状態の変更を受信しました。 -
Ev::STAT
-
EvStat ウォッチャーで指定したパスが、その属性を変更しました。
-
Ev::IDLE
-
他のウォッチャーが何もすることがなくなったときに、 EvIdle ウォッチャーが動作します。
-
Ev::PREPARE
-
すべての EvPrepare ウォッチャーが、 Ev::run() の開始前に起動しました。つまり、 イベントループがスリープしたり新しいイベントのポーリングをしたりする直前に EvPrepare ウォッチャーが起動するということになります。
-
Ev::CHECK
-
すべての EvCheck ウォッチャーが、 Ev::run() が新しいイベントをとりまとめた直後 (ただし受信したイベントのコールバックをキューに入れる前) にキューに入ります。つまり、 イベントループ内で優先度が同じ (あるいはより低い) ウォッチャーより前に EvCheck ウォッチャーが起動するということになります。
-
Ev::EMBED
-
EvEmbed で指定した埋め込みイベントループのウォッチャーが注目する必要があります。
-
Ev::CUSTOM
-
まだ
libev
で送信したりそれ以外の使いかたをしたりはしていませんが、libev
ユーザーが (EvWatcher::feed() などで) ウォッチャーに通知するために使えます。