定義済み定数
ループを作るときに渡すフラグ
-
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() などで)
ウォッチャーに通知するために使えます。
-
Ev::ERROR
-
指定されていないエラーが発生し、ウォッチャーが停止しました。
これが発生する原因として考えられるのは、
libev がメモリ不足でウォッチャーをきちんと開始できなかった場合や
ファイルディスクリプタが閉じてしまった場合などがあります。
libev は、これらに関してはアプリケーションのバグとみなします。
詳細は
» ANATOMY
OF A WATCHER
を参照ください。
バックエンドのフラグ
-
Ev::BACKEND_SELECT
-
select(2) バックエンド
-
Ev::BACKEND_POLL
-
poll(2) バックエンド
-
Ev::BACKEND_EPOLL
-
Linux 限定の
epoll(7)
バックエンド。2.6.9 以前のカーネルでもそれ以降のカーネルでも使えます。
-
Ev::BACKEND_KQUEUE
-
kqueue
バックエンド。大半の BSD システムで利用します。
EvEmbed ウォッチャーを使って、
kqueue バックエンドのループを別のループに埋め込むことができます。
たとえば、
kqueue バックエンドのループを作って、
それをソケットに対してだけ使うこともできます。
-
Ev::BACKEND_DEVPOLL
-
Solaris 8 バックエンド。現時点では未実装です。
-
Ev::BACKEND_PORT
-
Solaris 10 のイベントポート機構で、規模が大きくなっても対応できます。
-
Ev::BACKEND_ALL
-
壊れているものも含めて、すべてのバックエンドを試します。
これを明示的に使うことは推奨しません。ビット演算子を使って、
Ev::BACKEND_ALL
& ~
Ev::BACKEND_KQUEUE
のようにするか、
Ev::recommendedBackends()
を使うか、あるいは何もバックエンドを指定しないようにしましょう。
-
Ev::BACKEND_MASK
-
これはバックエンドではなく、
flags
の中のすべてのバックエンドビットをマスクするものです。
たとえば、環境変数
LIBEV_FLAGS
を変更するときに使います。
注意:
デフォルトのループの場合は、モジュールの初期化時に
Ev が
(もし使えれば) pthread_atfork を使って
» ev_loop_fork
の呼び出しを登録します。
注意:
Ev クラスには、
デフォルトのイベントループ にアクセスするメソッドが用意されています
(Ev::iteration() や Ev::depth() など)。
カスタムループ
(EvLoop::__construct() で作ったもの)
の場合、これらの値にアクセスするには
EvLoop クラスのプロパティやメソッドを使います。
デフォルトのイベントループ自体のインスタンスを取得するには
EvLoop::defaultLoop()
メソッドを使います。