<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.ev.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'ev.periodic-modes.php',
    1 => 'Modes d\'op&eacute;ration p&eacute;riodique d\'un watcher',
    2 => 'Modes d\'op&eacute;ration p&eacute;riodique d\'un watcher',
  ),
  'up' => 
  array (
    0 => 'book.ev.php',
    1 => 'Ev',
  ),
  'prev' => 
  array (
    0 => 'ev.watcher-callbacks.php',
    1 => 'Les fonctions de rappel d\'un Watcher',
  ),
  'next' => 
  array (
    0 => 'class.ev.php',
    1 => 'Ev',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/ev/periodic-modes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="ev.periodic-modes" class="chapter">
 <h1 class="title">Modes d&#039;opération périodique d&#039;un watcher</h1>

 <p class="simpara">
  Le watcher <span class="classname"><a href="class.evperiodic.php" class="classname">EvPeriodic</a></span> fonctionne en différents
  modes suivant les paramètres <code class="parameter">offset</code>,
  <code class="parameter">interval</code> et <code class="parameter">reschedule_cb</code>.
 </p>
 <ol type="1">
  <li class="listitem">
   <span class="simpara">
    Le mode <em>Minuterie absolue</em>. Dans ce mode,
    <code class="parameter">interval</code> = <code class="literal">0</code>,
    <code class="parameter">reschedule_cb</code> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    L&#039;appel se fera à l&#039;heure d&#039;horloge <code class="parameter">offset</code>
    et ne sera pas répété. Il ne sera pas ajusté lorsqu&#039;un bond dans le temps
    surviendra, aussi, s&#039;il doit être exécuté à
    <em>January 1st 2014</em>, alors il le sera lorsque l&#039;heure
    système sera atteinte, ou dépassée.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    Le mode <em>Minuterie avec répétition par intervalle</em>.
    Dans ce mode, <code class="parameter">interval</code> &gt; <code class="literal">0</code>,
    <code class="parameter">reschedule_cb</code> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ; le watcher sera automatiquement
    programmé pour se terminer à la prochaine durée
    <code class="parameter">offset</code> + <strong><code>N</code></strong> * <code class="parameter">interval</code>
    (pour un entier <strong><code>N</code></strong>) puis, se répète, indépendamment des sauts
    dans le temps.
   </span>
   <p class="para">
    Il peut être utilisé pour créer des minuteries qui ne dérivent pas en respectant
    l&#039;horloge système :
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$hourly </span><span style="color: #007700">= </span><span style="color: #0000BB">EvPeriodic</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">3600</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, function () {<br />  echo </span><span style="color: #DD0000">"une fois par heure\n"</span><span style="color: #007700">;<br />});<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    Cela ne signifie pas qu&#039;il y aura toujours <code class="literal">3600</code> secondes
    entre chaque appel, mais seulement que la fonction de rappel sera appelée
    lorsque l&#039;horloge système affichera une heure pleine (<em>UTC</em>).
   </p>
   <span class="simpara">
    La classe <span class="classname"><a href="class.evperiodic.php" class="classname">EvPeriodic</a></span> va tenter d&#039;exécuter la fonction
    de rappel dans ce mode à la prochaine heure possible où
    <var class="varname">time</var> = <code class="parameter">offset</code> (<code class="literal">mod</code>
    <code class="parameter">interval</code>), indépendamment des sauts dans le temps.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    Le mode <em>reprogrammation manuelle</em>. Dans ce mode,
    <code class="parameter">reschedule_cb</code> est un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>.
   </span>
   <span class="simpara">
    <code class="parameter">interval</code> et <code class="parameter">offset</code>
    seront tous les deux ignorés. À la place, chaque fois que le watcher périodique
    est prévu, la fonction de rappel de reprogrammation (<code class="parameter">reschedule_cb</code>)
    sera appelée avec le watcher d&#039;abord, et le temps courant comme second argument.
   </span>
   <span class="simpara">
    Cette fonction de rappel <em>ne doit pas</em> stopper ou détruire
    ce watcher périodique, ni un autre, et <em>ne doit pas</em>
    appeler de fonctions ou de méthodes de boucle d&#039;événements. Pour le stopper,
    il faut retourner <code class="literal">1e30</code> et le stopper après. Un watcher
    <span class="classname"><a href="class.evprepare.php" class="classname">EvPrepare</a></span> peut être utilisé pour réaliser cette tâche.
   </span>
   <span class="simpara">
    Il doit retourner la prochaine heure d&#039;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&#039;autres moments.
   </span>
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Utilisation de rappel de reprogrammation</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Toutes les 10,5 secondes<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">reschedule_cb </span><span style="color: #007700">(</span><span style="color: #0000BB">$watcher</span><span style="color: #007700">, </span><span style="color: #0000BB">$now</span><span style="color: #007700">) {<br />   return </span><span style="color: #0000BB">$now </span><span style="color: #007700">+ (</span><span style="color: #0000BB">10.5</span><span style="color: #007700">. - </span><span style="color: #0000BB">fmod</span><span style="color: #007700">(</span><span style="color: #0000BB">$now</span><span style="color: #007700">, </span><span style="color: #0000BB">10.5</span><span style="color: #007700">));<br />}<br /><br /></span><span style="color: #0000BB">$w </span><span style="color: #007700">= new </span><span style="color: #0000BB">EvPeriodic</span><span style="color: #007700">(</span><span style="color: #0000BB">0.</span><span style="color: #007700">, </span><span style="color: #0000BB">0.</span><span style="color: #007700">, </span><span style="color: #DD0000">"reschedule_cb"</span><span style="color: #007700">, function (</span><span style="color: #0000BB">$w</span><span style="color: #007700">, </span><span style="color: #0000BB">$revents</span><span style="color: #007700">) {<br />   echo </span><span style="color: #0000BB">time</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />});<br /><br /></span><span style="color: #0000BB">Ev</span><span style="color: #007700">::</span><span style="color: #0000BB">run</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </li>
 </ol>
</div>
<?php manual_footer($setup); ?>