(PECL ev >= 0.2.0)
Les watchers périodiques sont des sortes de minuteurs, mais ils sont très polyvalents.
Contrairement à EvTimer, les watchers EvPeriodic ne sont pas basés sur un temps réel (ou un temps relatif, le temps physique qui passe), mais sur un temps d'horloge (temps absolu, calendaire, ou d'horloge). La différence est qu'un temps d'horloge peut être plus rapide ou plus lent qu'un temps réel, et les sauts dans le temps ne sont pas rares (i.e. lors d'un ajustement).
Un watcher EvPeriodic peut être configuré pour
être lancé après des points spécifiques dans le temps. Par exemple,
si un watcher EvPeriodic est configuré pour
se lancer "dans 10 secondes" (i.e.
EvLoop::now() + 10.0
,
i.e. un temps absolu, et non un délai), et que l'horloge système
est ré-initialisée à Janvier de l'année dernière,
alors cela prendra une année et plus à lancer l'événement (contrairement
à EvTimer qui sera lancé 10
secondes après son démarrage, sachant qu'il utilise un délai maximal d'attente
relatif).
Comme pour les minuteurs, il est garantie que la fonction de rappel soit appelée uniquement lorsque le point dans le temps où il est supposé se lancer ne soit passé. Si plusieurs minuteurs deviennent prêts en même temps pendant la même itération de boucle, alors ceux dont les valeurs de délai maximal d'attente sont les plus proches seront appelées avant ceux qui ont des valeurs de délai maximal d'attente plus éloignés (mais ceci n'est plus vrai lorsqu'une fonction de rappel appelle récursivement la méthode EvLoop::run()).
$offset
,
string
$interval
,
callable
$reschedule_cb
,
callable
$callback
[,
mixed
$data
= NULL
[,
int
$priority
= 0
]] )$offset
,
double
$interval
,
callable
$reschedule_cb
,
callable
$callback
[,
mixed
$data
= NULL
[,
int
$priority
= 0
]] )Lors de la répétition, va contenir la valeur de la position, sinon, ce sera le point absolu dans le temps (la valeur de la position passée à la méthode EvPeriodic::set(), bien que libev peut modifier cette valeur pour une meilleure stabilité numérique).
La valeur de l'intervalle courant. Peut être modifié à tout moment, mais les modifications ne prennent effet que lorsque le minuteur périodique ne se lance, ou lorsque la méthode EvPeriodic::again() est appelée.