mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 09:22:07 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@349343 c90b9560-bf6c-de11-be94-00142212c4b1
126 lines
4.7 KiB
XML
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> > <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
|
|
-->
|