摘要:周期性观察者的运行模式根据偏移间隔和重新调度参数,不同周期的观察者工作绝对定时器。这并不意味着触发器之间总是有秒的时间,但只有当系统时间显示一个完整的小时时才会调用回调。它必须根据传递的时间值也就是说,大于或等于第二个参数的最低时间值。
Periodic watcher operation modes (周期性观察者的运行模式)
根据偏移、间隔和重新调度参数,不同周期的观察者工作
offset绝对定时器。在此模式中,interval = 0,reschedule_cb = NULL. 这一次只是简单的触发在时钟时间偏移,不重复。当时间跳跃发生时,它不会调整,也就是说,如果它在2014/01/01运行,那么当系统时间达到或超过这个时间时,它将运行。
代码 执行结果start : 1529568868 w1: enter:1529568877 w1: end:1529568882 w11: enter:1529568888 # 如果我们吧offset都改成改成当前时间 再执行结果 start : 1529568995 w11: enter:1529568995 w1: enter:1529568995 w1: end:1529569000interval
重复间隔定时器。在这种模式offset = 0,reschedule_cb = NULL; 观察者将总是被安排在下一个偏移量offset + N * interval time(N代表某个整数)超时,然后重复,不管任何时间跳跃。
这并不意味着触发器之间总是有3600秒的时间,但只有当系统时间显示一个完整的小时(UTC)时才会调用回调。
这可以用来创建不随系统时间漂移的定时器:
代码执行结果w2:enter:1529569458 w2:end:1529569458 w3:enter:1529569458 w3:end:1529569458 w3:enter:1529569460 w3:end:1529569460 w2:enter:1529569460 w2:end:1529569460 w2:enter:1529569462 w2:end:1529569462 w3:enter:1529569462 w3:end:1529569462 w3:enter:1529569464 w3:end:1529569464 w2:enter:1529569464 w2:end:1529569464 w2:enter:1529569466 w2:end:1529569466 w3:enter:1529569466 w3:end:1529569466 # 我们注释w3代码 并打开w2里的sleep(3)执行结果 # 执行体时间 > 间隔时间 # 我们发现下一次执行时间是上一次执行完成时间 w2:enter:1529570041 w2:end:1529570046 w2:enter:1529570046 w2:end:1529570051 w2:enter:1529570051 w2:end:1529570056 w2:enter:1529570056 w2:end:1529570061 w2:enter:1529570061 w2:end:1529570066 w2:enter:1529570066 # 我们注释w3代码 并打开w2里的sleep(1)执行结果 # 执行体时间<=间隔时间 # 我们发现下一次执行时间是正常间隔后执行时间 w2:enter:1529570098 w2:end:1529570099 w2:enter:1529570100 w2:end:1529570101 w2:enter:1529570102 w2:end:1529570103 w2:enter:1529570104 # 我们打开w3里的sleep,然后再执行结果 # 某个观察者间隔时间受执行体影响,且多个观察者会互相影响间隔时间 w2:enter:1529569484 w2:end:1529569484 w3:enter:1529569484 w3:end:1529569487 w3:enter:1529569487 w3:end:1529569490 w2:enter:1529569490 w2:end:1529569490 w2:enter:1529569490 w2:end:1529569490 w3:enter:1529569490 w3:end:1529569493 w3:enter:1529569493 w3:end:1529569496 w2:enter:1529569496 w2:end:1529569496 w2:enter:1529569496 w2:end:1529569496 w3:enter:1529569496总结如果单个watcher执行体时间 > 间隔时间,那么下一次执行时间就是执行体完成时间
如果单个watcher执行体时间 <= 间隔时间,那么下一次执行时间就是间隔后执行时间
如果多个watcher,各执行体的时间相互影响对方EvPeriodic 将尝试在这种模式下运行回调,在当`time = offset ( mod interval )下一个可能的时间,不管任何时间跳跃。
reschedule_cb手动重调度模式。在这种模式reschedule_cb是可调用。
间隔和偏移都被忽略了。相反,每次周期性观察者被调度时,重新调度回调(reschedule_cb)将首先以观察者的方式调用,而当前时间作为第二个参数。
这个回调永远不能停止或破坏这个或任何其他周期性观察者,并且不能调用任何事件循环函数或方法。停止它会先返回1000,再停止。一个EvPrepare观察者可以用于此任务。
它必须根据传递的时间值(也就是说,大于或等于第二个参数的最低时间值。)返回下一次触发。它通常会在调用回调之前被调用,但也可能在其他时候被调用。
代码执行结果w5:enter:1529638365 w5:end:1529638380 w5:enter:1529638380 w5:end:1529638395 w5:enter:1529638395 w5:end:1529638410 w5:enter:1529638410 w5:end:1529638425 w5:enter:1529638425 w5:end:1529638440 w5:enter:1529638440 w5:end:1529638455 w5:enter:1529638455 w5:end:1529638470 w5:enter:1529638470 w5:end:1529638485 w5:enter:1529638485 w5:end:1529638500 w5:enter:1529638500 w5:end:1529638515 w5:enter:1529638515 # php 5.6 # php --ri ev Ev扩展信息 Ev support => enabled Debug support => disabled Version => 1.0.4 [root@localhost libev]# Version => 1.0.4
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28881.html
摘要:例如,下面的代码等待成为可读的等待直到可读所有观察者构造函数会自动启动观察者。因此,应该保留由构造函数或工厂方法返回的观察者对象。观察者回调传递给观察者构造函数派生于的类等。 Watchers (观察者) 观察者是为了记录某件事而创造的对象。例如,下面的代码等待STDIN成为可读的: 所有观察者构造函数会自动启动观察者。createStopped方法创建停止监视器(例如 EvIo::...
阅读 2815·2023-04-25 20:06
阅读 1433·2021-08-26 14:15
阅读 2186·2021-08-12 13:27
阅读 1747·2019-08-30 15:55
阅读 3433·2019-08-30 13:20
阅读 2806·2019-08-29 15:12
阅读 3312·2019-08-29 15:06
阅读 2838·2019-08-29 14:13