(PECL ev >= 0.2.0)
EvTimer 觀察器是簡單的相對計時器,在給定時間後產生事件,並且之後可以選擇以規律的間隔重複。
這些計時器基於實際時間,也就是說,如果註冊一個在一小時後逾時的事件,然後將系統時鐘重設為*去年一月*,它仍然會在(大約)一小時後逾時。「大約」是因為偵測時間跳躍很困難,而且一些不準確性是不可避免的。
回呼函式保證只會在其逾時時間過後才被呼叫(並非正好在逾時時間點,因此在時鐘解析度很低的系統上,這可能會造成小延遲)。如果在同一個事件迴圈迭代中有多個計時器準備就緒,則逾時時間較早的計時器會在具有相同優先順序但逾時時間較晚的計時器之前被呼叫(但當回呼函式遞迴呼叫 EvLoop::run() 時,這就不再成立)。
計時器本身會盡力避免漂移,也就是說,如果計時器被設定為每 10
秒觸發一次,那麼它通常會在正好 10
秒的間隔觸發。然而,如果腳本因為執行時間超過 10
秒而無法跟上計時器,則計時器在每個事件迴圈迭代中只會觸發一次。
$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
(可能略少,因為回調調用也需要一些時間),依此類推。