Files
doc-fr/reference/ev/periodic-modes.xml
George Peter Banyard 0794c05b6a Sync with latest EN revision
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@349343 c90b9560-bf6c-de11-be94-00142212c4b1
2020-03-07 19:22:39 +00:00

126 lines
4.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7ce29cc163c773d1623cad6b3b64ab652d22a3fb Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="ev.periodic-modes" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Modes d'opération périodique d'un watcher</title>
<para>
Le watcher <classname>EvPeriodic</classname> fonctionne en différents
modes suivant les paramètres <parameter>offset</parameter>,
<parameter>interval</parameter> et <parameter>reschedule_cb</parameter>.
</para>
<orderedlist>
<listitem>
<para>
Le mode <emphasis>Minuterie absolue</emphasis>. Dans ce mode,
<parameter>interval</parameter> = <constant>0</constant>,
<parameter>reschedule_cb</parameter> = &null;.
L'appel se fera à l'heure d'horloge <parameter>offset</parameter>
et ne sera pas répété. Il ne sera pas ajusté lorsqu'un bon dans le temps
surviendra, aussi, s'il doit être exécuté à
<emphasis>January 1st 2014</emphasis>, alors il le sera lorsque l'heure
système sera atteinte, ou dépassée.
</para>
</listitem>
<listitem>
<para>
Le mode <emphasis>Minuterie avec répétition par intervalle</emphasis>.
Dans ce mode, <parameter>interval</parameter> &gt; <constant>0</constant>,
<parameter>reschedule_cb</parameter> = &null; ; le watcher sera automatiquement
programmé pour se terminer à la prochaine durée
<parameter>offset</parameter> + <constant>N</constant> * <parameter>interval</parameter>
(pour un entier <constant>N</constant>) puis, se répète, indépendamment des sauts
dans le temps.
</para>
<para>
Il peut être utilisé pour créer des minuteries qui ne dérivent pas en respectant
l'horloge système :
<programlisting role="php">
<![CDATA[
<?php
$hourly = EvPeriodic(0, 3600, NULL, function () {
echo "une fois par heure\n";
});
?>
]]>
</programlisting>
Cela ne signifie pas qu'il y aura toujours <constant>3600</constant> secondes
entre chaque appel, mais seulement que la fonction de rappel sera appelée
lorsque l'horloge système affichera une heure pleine (<emphasis>UTC</emphasis>).
</para>
<para>
La classe <classname>EvPeriodic</classname> va tenter d'exécuter la fonction
de rappel dans ce mode à la prochaine heure possible où
<varname>time</varname> = <parameter>offset</parameter> (<literal>mod</literal>
<parameter>interval</parameter>), indépendamment des sauts dans le temps.
</para>
</listitem>
<listitem>
<para>
Le mode <emphasis>reprogrammation manuelle</emphasis>. Dans ce mode,
<parameter>reschedule_cb</parameter> est un <type>callable</type>.
</para>
<para>
<parameter>interval</parameter> et <parameter>offset</parameter>
seront tous les deux ignorés. A la place, chaque fois que le watcher périodique
est prévue, la fonction de rappel de reprogrammation (<parameter>reschedule_cb</parameter>)
sera appelée avec le watcher d'abord, et le temps courant comme second argument.
</para>
<para>
Cette fonction de rappel <emphasis>ne doit pas</emphasis> stopper ou détruire
ce watcher périodique, ni un autre, et <emphasis>ne doit pas</emphasis>
appeler de fonctions ou de méthodes de boucle d'événements. Pour le stopper,
retournez <constant>1e30</constant> et stoppez le après. Un watcher
<classname>EvPrepare</classname> peut être utilisé pour réaliser cette tâche.
</para>
<para>
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ée, habituellement, juste après
que la fonction de rappel ne soit lancée, mais possiblement à d'autres moments.
</para>
<example>
<title>Using reschedule callback</title>
<programlisting role="php">
<![CDATA[
<?php
// Chaque 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();
?>
]]>
</programlisting>
</example>
</listitem>
</orderedlist>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->