函式名稱:EvLoop::periodic()
適用版本:Ev 1.0.0 或更高版本
用法:EvLoop::periodic() 方法用於在指定的時間間隔內重複呼叫給定的回撥函式。
語法:
public EvPeriodic EvLoop::periodic(float $offset, float $interval, callable $callback [, mixed $data = null [, int $priority = 0]])
引數:
$offset
:延遲呼叫回撥函式的時間(以秒為單位)。可以是浮點數。$interval
:回撥函式之間的間隔時間(以秒為單位)。可以是浮點數。$callback
:回撥函式,每當間隔到達時會被呼叫。回撥函式應該接受一個引數$watcher
,它是當前正在執行的週期觀察者(EvPeriodic
物件)。$data
(可選):傳遞給回撥函式的額外資料。如果指定了該引數,它將作為回撥函式的第二個引數。$priority
(可選):指定回撥函式的優先順序。較高的數值表示較高的優先順序,可以是正或負整數。
返回值:返回一個 EvPeriodic
物件(週期觀察者),可以用於對觀察者進行操作和管理。
示例:
$loop = new EvLoop();
$counter = 0;
$periodic = $loop->periodic(1, 2, function ($watcher) use(&$counter) {
echo 'Iteration: ' . $counter . PHP_EOL;
$counter++;
if ($counter >= 5) {
$watcher->stop(); // 停止週期呼叫
echo 'Periodic watcher stopped.' . PHP_EOL;
}
});
$loop->run();
以上示例中,我們建立了一個 EvLoop
物件,並在每隔2秒呼叫一次回撥函式。回撥函式的作用是列印當前的迭代次數。在這個例子中,我們設定 $offset
為 1 表示延遲1秒後第一次呼叫回撥函式。當迭代次數到達5次時,我們使用 stop()
方法停止了週期呼叫,並輸出了一條資訊表示週期觀察者已經停止。
注意:在實際使用時,你可能需要根據具體需求調整時間間隔和回撥函式的邏輯。