Режими роботи періодичних спостерігачів
Спостерігачі EvPeriodic працюють у різних режимах залежно від значення параметрів offset
interval
иreschedule_cb
-
Абсолютний таймер. У цьому режимі
interval
reschedule_cb
null
. Таймер просто спрацює один раз у задане вoffset
час. Він не компенсує стрибки часу і якщо вказано спрацювати в1 Січня 2014, то він спрацює коли системний час дорівнюватиме або більше цього значення. -
Таймер із фіксованим інтервалом. У цьому режимі
interval
> , аreschedule_cb
null
. Кожне подальше спрацювання буде рівно черезoffset
N
*interval
(де**N
**- ціле число), незважаючи на стрибки часу.Це можна використовувати для створення таймерів, які не розходяться із системним часом:
Loading...Це не означає, що між спрацюваннями завжди буде рівно**
3600
**секунд. Це означає, що callback-функція буде викликана тільки коли системний годинник покаже повну годину (UTCУ цьому режимі,EvPeriodicбуде намагатися запустити callback-функцію в наступний доступний час, коли time =
offset
mod
interval
), незалежно від стрибків часу. -
Режим ручного перевизначення часу спрацьовування. У цьому режимі
reschedule_cb
є коректним параметром типуcallableinterval
иoffset
ігноруються. Натомість, при кожному спрацьовуванні, спостерігач запускає callback-функцію (reschedule_cb
) з двома аргументами, посиланням на спостерігача та часом.Ця callback-функція ніколине повинназупиняти або знищувати цей або будь-який інший періодичний спостерігач іне повиннавикликати функції та методи подієвого циклу. Для зупинки можна повернути дуже велику кількість, наприклад,**
1e30
**і зупинити спостерігач за межами цієї функції. Для цього можна використати спостерігачівEvPrepareЦя функція повинна повернути наступний час спрацьовування, ґрунтуючись на переданому значенні часу (тобто найменше значення часу більше або дорівнює другому аргументу). Зазвичай вона викликається перед тим, як буде викликана основна callback-функція спостерігача, але може пізніше.
Приклад #1 Використання спостерігача з ручним перевизначенням часу спрацьовування
Loading...