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