Watchers (觀察者)
觀察者是為了記錄某件事而創造的物件。例如,下面的程式碼等待STDIN
成為可讀的:
<?php
// Wait until STDIN is readable
// 等待直到STDIN可讀
$w = new EvIo(STDIN, Ev::READ, function ($watcher, $revents) {
echo "STDIN is readable
";
});
Ev::run(Ev::RUN_ONCE);
?>
所有觀察者建構函式會自動啟動觀察者。createStopped
方法建立停止監視器(例如 EvIo::createStopped())
注意,當觀察者物件被破壞時,觀察者會自動停止。因此,應該保留由建構函式或工廠方法返回的觀察者物件。
還要注意的是,所有改變watcher
屬性(set,priority 等)的方法都會自動停止並在啟用時再次啟動,這意味著掛起的事件會丟失。
參見: Watcher callbacks.
Watcher callbacks (觀察者回撥)
所有監視器可以是活動的(等待事件)或不活動的(暫停)。只有活動的觀察者才會呼叫它們的回撥。所有回撥都會被呼叫(至少有兩個引數):watcher
: 觀察者,和revents
: 接收時間的位掩碼。
觀察者回撥傳遞給觀察者建構函式(派生於EvWatcher – EvCheck::__construct() , EvChild::__construct()的類 等)。觀察者回撥應該匹配以下原型:
void callback ([ object $watcher = NULL [, int $revents = NULL ]] )
watcher (觀察者例項)
The watcher instance(of a class extending EvWatcher ).
revents (觀察者接收的事件集)
Watcher received events.
每個監視者型別都有相關的revents
位掩碼,因此可以對多個觀察者使用相同的回撥。事件掩碼是在型別之後命名的,即 EvChild (or EvLoop::child() ), 設定 EV::CHILD , EvPrepare (or EvLoop::prepare() ) 設定 Ev::PREPARE , EvPeriodic (or EvLoop::periodic() ) sets Ev::PERIODIC等等,除了I/O事件之外(它可以同時設定Ev::READ 和 Ev::WRITE bits)