Le watcher EvPeriodic fonctionne en différents
modes suivant les paramĂštres offset,
interval et reschedule_cb.
interval = 0,
reschedule_cb = null.
L'appel se fera Ă l'heure d'horloge offset
et ne sera pas répété. Il ne sera pas ajusté lorsqu'un bond dans le temps
surviendra, aussi, s'il doit ĂȘtre exĂ©cutĂ© Ă
1er janvier 2014, alors il le sera lorsque l'heure
systÚme sera atteinte, ou dépassée.
interval > 0,
reschedule_cb = null ; le watcher sera automatiquement
programmé pour se terminer à la prochaine durée
offset + N * interval
(pour un entier N) puis, se répÚte, indépendamment des sauts
dans le temps.
Il peut ĂȘtre utilisĂ© pour crĂ©er des minuteries qui ne dĂ©rivent pas en respectant l'horloge systĂšme :
<?php
$hourly = EvPeriodic(0, 3600, NULL, function () {
echo "une fois par heure\n";
});
?>3600 secondes
entre chaque appel, mais seulement que la fonction de rappel sera appelée
lorsque l'horloge systĂšme affichera une heure pleine (UTC).
La classe EvPeriodic va tenter d'exécuter la fonction
de rappel dans ce mode Ă la prochaine heure possible oĂč
time = offset (mod
interval), indépendamment des sauts dans le temps.
reschedule_cb est un callable.
interval et offset
seront tous les deux ignorés. à la place, chaque fois que le watcher périodique
est prévu, la fonction de rappel de reprogrammation (reschedule_cb)
sera appelée avec le watcher d'abord, et le temps courant comme second argument.
Cette fonction de rappel ne doit pas stopper ou détruire
ce watcher périodique, ni un autre, et ne doit pas
appeler de fonctions ou de méthodes de boucle d'événements. Pour le stopper,
il faut retourner 1e30 et le stopper aprĂšs. Un watcher
EvPrepare peut ĂȘtre utilisĂ© pour rĂ©aliser cette tĂąche.
Il doit retourner la prochaine heure d'appel, en se basant sur la valeur
du temps passĂ© (la plus petite valeur de temps doit ĂȘtre supĂ©rieure
ou égale au second argument). Il sera appelé, habituellement, juste aprÚs
que la fonction de rappel ne soit lancée, mais possiblement à d'autres moments.
Exemple #1 Utilisation de rappel de reprogrammation
<?php
// Toutes les 10,5 secondes
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();
?>