(PECL ev >= 0.2.0)
EvTimer 监视器是简单的相对计时器,它们在给定时间后生成事件,并且可以选择在之后以规律的间隔重复。
计时器基于真实时间,也就是说,如果注册一个在 1 小时后超时的事件,并且将系统时钟重置为 *去年 1 月*,它仍然会在(大约)1 小时后超时。“大约”是因为检测时间跳跃很困难,并且不可避免地会有一些误差。
回调保证只有在其超时时间过去后才会被调用(而不是在超时时间,因此在时钟分辨率非常低的系统上,这可能会引入很小的延迟)。如果多个计时器在同一个循环迭代期间变为就绪,那么具有较早超时值的计时器会在具有相同优先级但具有较晚超时值的计时器之前被调用(但这在回调递归调用 EvLoop::run() 时不再成立)。
计时器本身将尽最大努力避免漂移,也就是说,如果将计时器配置为每 10
秒触发一次,那么它通常会在恰好 10
秒的间隔内触发。但是,如果脚本无法跟上计时器(因为它完成所需的时间超过了这 10
秒),则计时器在每个事件循环迭代中最多触发一次。
$after
,$repeat
,$callback
,$data
= null
,$priority
= 0$after
,$repeat
,$callback
,$data
= null
,$priority
= 0如果 repeat 为 0.0
,则一旦超时到达,它将自动停止。如果它是正数,那么计时器将自动配置为每隔 repeat 秒后再次触发,直到手动停止。
返回计时器触发之前剩余的时间。如果计时器处于活动状态,则此时间相对于当前事件循环时间,否则它是当前配置的超时值。
也就是说,在用 after
值为 5.0
和 repeat
值为 7.0
实例化 EvTimer 之后,remaining 返回 5.0
。当计时器启动并且经过 1 秒时,remaining 将返回 4.0
。当计时器到期并重新启动时,它将返回大约 7.0
(可能略少,因为回调调用也需要一些时间),依此类推。