当前位置: 首页 > 后端技术 > PHP

PHP'sEvTutorial3(Periodicwatcher)

时间:2023-03-30 04:17:15 PHP

Periodicwatcheroperationmodes(periodicwatcher'soperationmode)根据offset、interval和rescheduling参数,不同的periodicwatcher工作offsetabsolutetimer。在这种模式下,interval=0,reschedule_cb=NULL。这次只是触发时钟时间的偏移量,没有重复。时间跳跃时不调整,即如果在2014/01/01运行,系统时间达到或超过该时间时运行。code执行结果start:1529568868w1:enter:1529568877w1:end:1529568882w11:enter:1529568888#如果我们把它们改成当前时间然后执行结果start:1529568995w11:enter:1529568995w1:enter:89529516end:1529569000interval重复间隔定时器。该模式下offset=0,reschedule_cb=NULL;观察者总是会被安排在下一个偏移量offset+N*intervaltime(N代表某个整数)超时,然后重复,不管任何时间跳跃。这并不意味着触发之间总是有3600秒,而是只有当系统时间显示整小时(UTC)时才会调用回调。这可以用来创建一个不随系统时间漂移的定时器:代码间隔时间#我们发现下一次执行时间是上一次执行完成时间w2:enter:1529570041w2:end:1529570046w2:enter:1529570046w2:end:1529570051w2:enter:1529570051w2:end:1529570056w2:enter:1529570056w2:end:1529570061w2:enter:1529570061w2:end:1529570066w2:enter:1529570066#我们注释w3代码并打开w2里的sleep(1)执行Result#executivebodytime<=intervaltime#我们发现下一次执行时间是正常间隔后的执行时间w2:enter:1529570098w2:end:1529570099w2:enter:1529570100w2:end:1529570101w2:enter:1529570102w2:end:1529570103w2:enter:1529570104#我们在w3中开启sleep,然后执行result#一个观察者的间隔时间受执行体影响,多个观察者会相互影响。:1529569487w3:enter:1529569487w3:end:1529569490w2:enter:1529569490w2:end:1529569490w2:enter:1529569490w2:end:1529569490w3:enter:1529569490w3:end:1529569493w3:enter:1529569493w3:end:1529569496w2:enter:1529569496w2:end:1529569496w2:enter:1529569496w2:end:1529569496w3:enter:1529569496总结如果单个watcher的执行时间>间隔时间,那么下次执行的时间就是执行体的完成时间。如果单个watcher的执行时间<=interval时间,则下一次执行时间为Interval后的执行时间如果有多个watcher,每个执行体的时间相互影响EvPeriodic会尝试运行这种模式的回调,在`time=offset(modinterval)的下一个可能时间,不管任何时间跳跃reschedule_cb手动重新调度模式。在这种模式下,reschedule_cb是可调用的。间距和偏移量都被忽略。相反,每次调度周期性观察者时,将首先调用观察者的重新安排回调(reschedule_cb),当前时间作为第二个参数。这个回调绝不能停止或销毁这个或任何其他周期性观察者,也不能调用任何事件循环函数或方法。停止它会首先返回1000,然后停止。EvPrepare观察器可用于此任务。它必须根据传递的时间值(即大于或等于第二个参数的最小时间值。)返回下一次火灾。它通常会在调用回调之前调用,但也可能在其他时间调用。代码enabledDebugsupport=>disabledVersion=>1.0.4[root@localhostlibev]#Version=>1.0.4