函数名称: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()
方法停止了周期调用,并输出了一条信息表示周期观察者已经停止。
注意:在实际使用时,你可能需要根据具体需求调整时间间隔和回调函数的逻辑。