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 timeoffset
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 nextoffset
+N
*interval
time(for some integerN
) 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";
};
?>3600
seconds in between triggers, but only that the callback will be called when the system time shows a full hour( UTC ).EvPeriodic will try to run the callback in this mode at the next possible time where time =
offset
( modinterval
), regardless of any time jumps. -
Manual reschedule mode . In this mode
reschedule_cb
is a callable .interval
andoffset
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.
Example #1 Using reschedule callback
<?php
// Tick 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, $revents) {
echo time(), PHP_EOL;
});
Ev::run();
?>
Vertaling niet beschikbaar
De PHP-handleiding is nog niet in het Nederlands vertaald, dus het scherm is in het Engels. Als u wilt, kunt u het ook in het Frans of in het Duits raadplegen.
Als je de moed voelt, kun je je vertaling aanbieden ;-)
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 30/01/2003 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/php-rf-ev.periodic-modes.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.
Referenties
Deze verwijzingen en links verwijzen naar documenten die geraadpleegd zijn tijdens het schrijven van deze pagina, of die aanvullende informatie kunnen geven, maar de auteurs van deze bronnen kunnen niet verantwoordelijk worden gehouden voor de inhoud van deze pagina.
De auteur Deze site is als enige verantwoordelijk voor de manier waarop de verschillende concepten, en de vrijheden die met de referentiewerken worden genomen, hier worden gepresenteerd. Vergeet niet dat u meerdere broninformatie moet doorgeven om het risico op fouten te verkleinen.