<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<phpdoc:classref xml:id="class.evperiodic" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
 <title>The EvPeriodic class</title>
 <titleabbrev>EvPeriodic</titleabbrev>
 <partintro>
<!-- {{{ EvPeriodic intro -->
  <section xml:id="evperiodic.intro">
   &reftitle.intro;
  <para>
    Periodic watchers are also timers of a kind, but they are very versatile.
   </para>
   <para>
    Unlike
    <classname>EvTimer</classname>
    ,
    <classname>EvPeriodic</classname>
    watchers are not based on real time(or relative time, the physical time
    that passes) but on wall clock time(absolute time, calendar or clock). The
    difference is that wall clock time can run faster or slower than real
    time, and time jumps are not uncommon(e.g. when adjusting it).
   </para>
   <para>
    <classname>EvPeriodic</classname>
    watcher can be configured to trigger after some specific point in time.
    For example, if an
    <classname>EvPeriodic</classname>
    watcher is configured to trigger
    <emphasis>"in 10 seconds"</emphasis>
    (e.g.
    <methodname>EvLoop::now</methodname>
    +
    <constant>10.0</constant>
    , i.e. an absolute time, not a delay), and the system clock is reset to
    <emphasis>January of the previous year</emphasis>
    , then it will take a year or more to trigger the event (unlike an
    <classname>EvTimer</classname>
    , which would still trigger roughly
    <constant>10</constant>
    seconds after starting it as it uses a relative timeout).
   </para>
   <para>
    As with timers, the callback is guaranteed to be invoked only when the
    point in time where it is supposed to trigger has passed. If multiple
    timers become ready during the same loop iteration then the ones with
    earlier time-out values are invoked before ones with later time-out values
    (but this is no longer true when a callback calls
    <methodname>EvLoop::run</methodname>
    recursively).
   </para>
  </section>
<!-- }}} -->
  <section xml:id="evperiodic.synopsis">
   &reftitle.classsynopsis;

<!-- {{{ Synopsis -->
   <classsynopsis>
    <ooclass>
     <classname>EvPeriodic</classname>
    </ooclass>
<!-- {{{ Class synopsis -->
    <classsynopsisinfo>
     <ooclass>
      <classname>EvPeriodic</classname>
     </ooclass>
     <ooclass>
      <modifier>extends</modifier>
      <classname>EvWatcher</classname>
     </ooclass>
    </classsynopsisinfo>
<!-- }}} -->
    <classsynopsisinfo role="comment">&Properties;</classsynopsisinfo>
    <fieldsynopsis>
     <modifier>public</modifier>
     <varname linkend="evperiodic.props.offset">offset</varname>
    </fieldsynopsis>
    <fieldsynopsis>
     <modifier>public</modifier>
     <varname linkend="evperiodic.props.interval">interval</varname>
    </fieldsynopsis>
    <classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('evwatcher.synopsis')/descendant::db:fieldsynopsis)" />
    <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evperiodic')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])"/>
    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evperiodic')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])"/>
    <classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evwatcher')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
   </classsynopsis>
<!-- }}} -->
  </section>
<!-- {{{ EvPeriodic properties -->
  <section xml:id="evperiodic.props">
   &reftitle.properties;
   <variablelist>
    <varlistentry xml:id="evperiodic.props.offset">
     <term>
      <varname>offset</varname>
     </term>
     <listitem>
      <para>
       When repeating, this contains the offset value, otherwise this is the
       absolute point in time(the offset value passed to
       <methodname>EvPeriodic::set</methodname>
       , although
       <emphasis>libev</emphasis>
       might modify this value for better numerical stability).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry xml:id="evperiodic.props.interval">
     <term>
      <varname>interval</varname>
     </term>
     <listitem>
      <para>
       The current interval value. Can be modified any time, but changes only
       take effect when the periodic timer fires or
       <methodname>EvPeriodic::again</methodname>
       is being called.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </section>
<!-- }}} -->
 </partintro>

 &reference.ev.entities.evperiodic;

</phpdoc:classref>
<!-- 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
-->
