PHP 开发者大会日本 2024

EvPeriodic 类

(PECL ev >= 0.2.0)

简介

周期性监视器也是一种定时器,但它们非常通用。

EvTimer 不同,EvPeriodic 监视器不是基于实时(或相对时间,经过的物理时间),而是基于挂钟时间(绝对时间,日历或时钟)。区别在于挂钟时间可以比实时快或慢,时间跳跃并不少见(例如,当调整它时)。

EvPeriodic 监视器可以配置为在某个特定时间点触发。例如,如果一个 EvPeriodic 监视器配置为在“10 秒后”触发(例如 EvLoop::now() + 10.0,即绝对时间,而不是延迟),并且系统时钟重置为去年的 1 月,那么它将需要一年或更长时间才能触发事件(与 EvTimer 不同,后者仍然会在启动后大约 10 秒后触发,因为它使用相对超时)。

与定时器一样,回调函数保证仅在应该触发的时间点过去后才会被调用。如果在同一循环迭代期间多个定时器变为就绪状态,则具有较早超时值的定时器会在具有较晚超时值的定时器之前被调用(但是当回调函数递归调用 EvLoop::run() 时,情况不再如此)。

类概要

class EvPeriodic extends EvWatcher {
/* 属性 */
public $offset;
public $interval;
/* 继承的属性 */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* 方法 */
public __construct(
     float $offset,
     string $interval,
     callable $reschedule_cb,
     callable $callback,
     mixed $data = null,
     int $priority = 0
)
public again(): void
public at(): float
final public static createStopped(
     float $offset,
     float $interval,
     callable $reschedule_cb,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvPeriodic
public set( float $offset , float $interval ): void
/* 继承的方法 */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

属性

offset

重复时,包含偏移值;否则,这是绝对时间点(传递给 EvPeriodic::set() 的偏移值,尽管 libev 可能会修改此值以获得更好的数值稳定性)。

interval

当前间隔值。可以随时修改,但更改仅在周期性定时器触发或调用 EvPeriodic::again() 时生效。

目录

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top