Modes d'opération périodique d'un watcher

Le watcher EvPeriodic fonctionne en différents modes suivant les paramÚtres offset, interval et reschedule_cb.

  1. Le mode Minuterie absolue. Dans ce mode, 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.
  2. Le mode Minuterie avec répétition par intervalle. Dans ce mode, 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";
    });
    ?>
    Cela ne signifie pas qu'il y aura toujours 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.
  3. Le mode reprogrammation manuelle. Dans ce mode, 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();
    ?>
add a note

User Contributed Notes

There are no user contributed notes for this page.