摘要:周期性觀察者的運行模式根據偏移間隔和重新調度參數,不同周期的觀察者工作絕對定時器。這并不意味著觸發器之間總是有秒的時間,但只有當系統時間顯示一個完整的小時時才會調用回調。它必須根據傳遞的時間值也就是說,大于或等于第二個參數的最低時間值。
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28881.html
摘要:例如,下面的代碼等待成為可讀的等待直到可讀所有觀察者構造函數會自動啟動觀察者。因此,應該保留由構造函數或工廠方法返回的觀察者對象。觀察者回調傳遞給觀察者構造函數派生于的類等。 Watchers (觀察者) 觀察者是為了記錄某件事而創造的對象。例如,下面的代碼等待STDIN成為可讀的: 所有觀察者構造函數會自動啟動觀察者。createStopped方法創建停止監視器(例如 EvIo::...
閱讀 2840·2023-04-25 20:06
閱讀 1454·2021-08-26 14:15
閱讀 2246·2021-08-12 13:27
閱讀 1783·2019-08-30 15:55
閱讀 3480·2019-08-30 13:20
閱讀 2838·2019-08-29 15:12
閱讀 3341·2019-08-29 15:06
閱讀 2871·2019-08-29 14:13