(PECL ev >= 0.2.0)
EvTimer 观察器是简单的相对定时器,在给定时间后生成一个事件,并且可以选择在之后以规则的间隔重复。
定时器基于真实时间,也就是说,如果注册一个超时后一小时的事件,并将系统时钟重置为去年一月,它仍然会在(大约)一小时后超时。“大约”是因为检测时间跳跃很困难,而且一些不准确性是不可避免的。
保证只有在超时过去后才会调用回调(而不是在超时时调用,因此在时钟分辨率非常低的系统上,这可能会引入少量延迟)。如果在同一循环迭代期间多个定时器准备好,则超时值较早的定时器将在具有相同优先级但超时值较晚的定时器之前被调用(但在回调递归调用 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
。当定时器启动并经过一秒后,remaining 将返回 4.0
。当定时器到期并重新启动时,它将返回大约 7.0
(可能略少,因为回调调用也需要一些时间),依此类推。