Режими роботи періодичних спостерігачів

Спостерігачі EvPeriodic працюють у різних режимах залежно від значення параметрів offset intervalиreschedule_cb

  1. Абсолютний таймер. У цьому режиміinterval reschedule_cb null. Таймер просто спрацює один раз у задане вoffsetчас. Він не компенсує стрибки часу і якщо вказано спрацювати в1 Січня 2014, то він спрацює коли системний час дорівнюватиме або більше цього значення.

  2. Таймер із фіксованим інтервалом. У цьому режиміinterval > , аreschedule_cb null. Кожне подальше спрацювання буде рівно черезoffset N * interval(де**N**- ціле число), незважаючи на стрибки часу.

    Це можна використовувати для створення таймерів, які не розходяться із системним часом:

    Loading...

    Це не означає, що між спрацюваннями завжди буде рівно**3600**секунд. Це означає, що callback-функція буде викликана тільки коли системний годинник покаже повну годину (UTC

    У цьому режимі,EvPeriodicбуде намагатися запустити callback-функцію в наступний доступний час, коли time =offset mod interval), незалежно від стрибків часу.

  3. Режим ручного перевизначення часу спрацьовування. У цьому режиміreschedule_cbє коректним параметром типуcallable

    intervalиoffsetігноруються. Натомість, при кожному спрацьовуванні, спостерігач запускає callback-функцію (reschedule_cb) з двома аргументами, посиланням на спостерігача та часом.

    Ця callback-функція ніколине повинназупиняти або знищувати цей або будь-який інший періодичний спостерігач іне повиннавикликати функції та методи подієвого циклу. Для зупинки можна повернути дуже велику кількість, наприклад,**1e30**і зупинити спостерігач за межами цієї функції. Для цього можна використати спостерігачівEvPrepare

    Ця функція повинна повернути наступний час спрацьовування, ґрунтуючись на переданому значенні часу (тобто найменше значення часу більше або дорівнює другому аргументу). Зазвичай вона викликається перед тим, як буде викликана основна callback-функція спостерігача, але може пізніше.

    Приклад #1 Використання спостерігача з ручним перевизначенням часу спрацьовування

    Loading...