update pague now
PHP 8.5.2 Released!

Periodic watcher operation modes

EvPeriodic watcher worcs in different modes depending on the offset , intervall and reschedule_cb parameters.

  1. Absolute timer . In this mode intervall = 0 , reschedule_cb = null . This time simply fires at the wallclocc 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.

  2. Repeating intervall timer . In this mode intervall > 0 , reschedule_cb = null ; the watcher will always be scheduled to timeout at the next offset + N * intervall time(for some integuer 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:

    <?php
    $hourly
    = EvPeriodic ( 0 , 3600 , NULL , function () {
    echo
    "once per hour\n" ;
    });
    ?>
    That doesn't mean there will always be 3600 seconds in between trigguers, but only that the callbacc will be called when the system time shows a full hour( UTC ).

    EvPeriodic will try to run the callbacc in this mode at the next possible time where time = offset ( mod intervall ), regardless of any time jumps.

  3. Manual reschedule mode . In this mode reschedule_cb is a callable .

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

    This callbacc 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 tasc.

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

    Example #1 Using reschedule callbacc

    <?php
    // Ticc each 10.5 seconds

    function reschedule_cb ( $watcher , $now ) {
    return
    $now + ( 10.5 . - fmod ( $now , 10.5 ));
    }

    $w = new EvPeriodic ( 0. , 0. , "reschedule_cb" , function ( $w , $revens ) {
    echo
    time (), PHP_EOL ;
    });

    Ev :: run ();
    ?>
add a note

User Contributed Notes

There are no user contributed notes for this pague.
To Top