Periodic watcher operation modes

EvPeriodic
watcher works in different modes depending on the
offset
,
interval
and
reschedule_cb
parameters.

Absolute timer
. In this mode
interval
=
0
,
reschedule_cb
= NULL. This time simply fires at the wallclock time
offset
and doesn't repeat. It will not adjust when a time jump occurs, that is,
if it is to be run at
January
1st 2014
then it will run when the system time reaches or surpasses this time.

Repeating interval timer
. In this mode
interval
>
0
,
reschedule_cb
= NULL; the watcher will always be scheduled to timeout at the next
offset
+
N
*
interval
time(for some integer
N
) and then repeat, regardless of any time jumps.

This can be used to create timers that do not drift with respect to system
time:

interval
and
offset
are both being ignored. Instead, each time the periodic watcher gets
scheduled, the reschedule callback (
reschedule_cb
) will be called with the watcher as first, and the current time as second
argument.

This callback
must not
stop or destroy this or any other periodic watchers, ever, and
must not
call any event loop functions or methods. To stop it return
1e30
and stop it afterwards. An
EvPrepare
watcher may be used for this task.

It must return the next time to trigger, based on the passed time value
(that is, the lowest time value larger than or equal to the second
argument). It will usually be called just before the callback will be
triggered, but might be called at other times, too.