<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>The EvLoop class</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="evio.set.html">EvIo::set</a></div> <div class="next" style="text-align: right; float: right;"><a href="evloop.backend.html">EvLoop::backend</a></div> <div class="up"><a href="book.ev.html">Ev</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="class.evloop" class="reference"> <h1 class="title">The EvLoop class</h1> <div class="partintro"><p class="verinfo">(PECL ev >= 0.2.0)</p> <div class="section" id="evloop.intro"> <h2 class="title">Introduction</h2> <p class="para"> Represents an event loop that is always distinct from the <em class="emphasis">default loop</em> . Unlike the <em class="emphasis">default loop</em> , it cannot handle <a href="class.evchild.html" class="classname">EvChild</a> watchers. </p> <p class="para"> Having threads we have to create a loop per thread, and use the <em class="emphasis">the default loop</em> in the parent thread. </p> <p class="para"> The <em class="emphasis">default event loop</em> is initialized automatically by <em class="emphasis">Ev</em> . It is accessable via methods of the <a href="class.ev.html" class="classname">Ev</a> class, or via <span class="methodname"><a href="evloop.defaultloop.html" class="methodname">EvLoop::defaultLoop()</a></span> method. </p> </div> <div class="section" id="evloop.synopsis"> <h2 class="title">Class synopsis</h2> <div class="classsynopsis"> <div class="ooclass"> </div> <div class="classsynopsisinfo"> <span class="ooclass"> <span class="modifier">final</span> <strong class="classname">EvLoop</strong> </span> {</div> <div class="classsynopsisinfo classsynopsisinfo_comment">/* Properties */</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.data">$<var class="varname">data</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.backend">$<var class="varname">backend</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.is-default-loop">$<var class="varname">is_default_loop</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.iteration">$<var class="varname">iteration</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.pending">$<var class="varname">pending</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.io-interval">$<var class="varname">io_interval</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.timeout-interval">$<var class="varname">timeout_interval</var></a></var> ;</div> <div class="fieldsynopsis"> <span class="modifier">public</span> <var class="varname"><a href="class.evloop.html#evloop.props.depth">$<var class="varname">depth</var></a></var> ;</div> <div class="classsynopsisinfo classsynopsisinfo_comment">/* Methods */</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">int</span> <span class="methodname"><a href="evloop.backend.html" class="methodname">backend</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvCheck</span> <span class="methodname"><a href="evloop.check.html" class="methodname">check</a></span> ( <span class="methodparam"> <span class="type">string</span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$data</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$priority</code> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvChild</span> <span class="methodname"><a href="evloop.child.html" class="methodname">child</a></span> ( <span class="methodparam"> <span class="type">string</span> <code class="parameter">$pid</code> </span> , <span class="methodparam"> <span class="type">string</span> <code class="parameter">$trace</code> </span> , <span class="methodparam"> <span class="type">string</span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$data</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$priority</code> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="methodname"><a href="evloop.construct.html" class="methodname">__construct</a></span> ([ <span class="methodparam"> <span class="type">int</span> <code class="parameter">$flags</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = NULL</span> </span> [, <span class="methodparam"> <span class="type">double</span> <code class="parameter">$io_interval</code> <span class="initializer"> = 0.0</span> </span> [, <span class="methodparam"> <span class="type">double</span> <code class="parameter">$timeout_interval</code> <span class="initializer"> = 0.0</span> </span> ]]]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="modifier">static</span> <span class="type">EvLoop</span> <span class="methodname"><a href="evloop.defaultloop.html" class="methodname">defaultLoop</a></span> ([ <span class="methodparam"> <span class="type">int</span> <code class="parameter">$flags</code> <span class="initializer"> = Ev::FLAG_AUTO</span> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = NULL</span> </span> [, <span class="methodparam"> <span class="type">double</span> <code class="parameter">$io_interval</code> <span class="initializer"> = 0.</span> </span> [, <span class="methodparam"> <span class="type">double</span> <code class="parameter">$timeout_interval</code> <span class="initializer"> = 0.</span> </span> ]]]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvEmbed</span> <span class="methodname"><a href="evloop.embed.html" class="methodname">embed</a></span> ( <span class="methodparam"> <span class="type">string</span> <code class="parameter">$other</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$data</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$priority</code> </span> ]]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvFork</span> <span class="methodname"><a href="evloop.fork.html" class="methodname">fork</a></span> ( <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvIdle</span> <span class="methodname"><a href="evloop.idle.html" class="methodname">idle</a></span> ( <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.invokepending.html" class="methodname">invokePending</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvIo</span> <span class="methodname"><a href="evloop.io.html" class="methodname">io</a></span> ( <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$fd</code> </span> , <span class="methodparam"> <span class="type">int</span> <code class="parameter">$events</code> </span> , <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.loopfork.html" class="methodname">loopFork</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">double</span> <span class="methodname"><a href="evloop.now.html" class="methodname">now</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.nowupdate.html" class="methodname">nowUpdate</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvPeriodic</span> <span class="methodname"><a href="evloop.periodic.html" class="methodname">periodic</a></span> ( <span class="methodparam"> <span class="type">double</span> <code class="parameter">$offset</code> </span> , <span class="methodparam"> <span class="type">double</span> <code class="parameter">$interval</code> </span> , <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvPrepare</span> <span class="methodname"><a href="evloop.prepare.html" class="methodname">prepare</a></span> ( <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.resume.html" class="methodname">resume</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.run.html" class="methodname">run</a></span> ([ <span class="methodparam"> <span class="type">int</span> <code class="parameter">$flags</code> <span class="initializer"> = 0</span> </span> ] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvSignal</span> <span class="methodname"><a href="evloop.signal.html" class="methodname">signal</a></span> ( <span class="methodparam"> <span class="type">int</span> <code class="parameter">$signum</code> </span> , <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvStat</span> <span class="methodname"><a href="evloop.stat.html" class="methodname">stat</a></span> ( <span class="methodparam"> <span class="type">string</span> <code class="parameter">$path</code> </span> , <span class="methodparam"> <span class="type">double</span> <code class="parameter">$interval</code> </span> , <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.stop.html" class="methodname">stop</a></span> ([ <span class="methodparam"> <span class="type">int</span> <code class="parameter">$how</code> </span> ] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.suspend.html" class="methodname">suspend</a></span> ( <span class="methodparam">void</span> )</div> <div class="methodsynopsis dc-description"> <span class="modifier">final</span> <span class="modifier">public</span> <span class="type">EvTimer</span> <span class="methodname"><a href="evloop.timer.html" class="methodname">timer</a></span> ( <span class="methodparam"> <span class="type">double</span> <code class="parameter">$after</code> </span> , <span class="methodparam"> <span class="type">double</span> <code class="parameter">$repeat</code> </span> , <span class="methodparam"> <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> <code class="parameter">$callback</code> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$data</code> <span class="initializer"> = <strong><code>NULL</code></strong></span> </span> [, <span class="methodparam"> <span class="type">int</span> <code class="parameter">$priority</code> <span class="initializer"> = 0</span> </span> ]] )</div> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">void</span> <span class="methodname"><a href="evloop.verify.html" class="methodname">verify</a></span> ( <span class="methodparam">void</span> )</div> }</div> </div> <div class="section" id="evloop.props"> <h2 class="title">Properties</h2> <dl> <dt id="evloop.props.data"> <span class="term"> <var class="varname"><var class="varname">data</var></var> </span> <dd> <p class="para"> Custom data attached to loop </p> </dd> </dt> <dt id="evloop.props.backend"> <span class="term"> <var class="varname"><var class="varname">backend</var></var> </span> <dd> <p class="para"> <em class="emphasis">Readonly</em> . The <a href="class.ev.html#ev.constants.watcher-backends" class="link">backend flags</a> indicating the event backend in use. </p> </dd> </dt> <dt id="evloop.props.is-default-loop"> <span class="term"> <var class="varname"><var class="varname">is_default_loop</var></var> </span> <dd> <p class="para"> <em class="emphasis">Readonly</em> . <strong><code>TRUE</code></strong> if it is the default event loop. </p> </dd> </dt> <dt id="evloop.props.iteration"> <span class="term"> <var class="varname"><var class="varname">iteration</var></var> </span> <dd> <p class="para"> The current iteration count of the loop. See <span class="methodname"><a href="ev.iteration.html" class="methodname">Ev::iteration()</a></span> </p> </dd> </dt> <dt id="evloop.props.pending"> <span class="term"> <var class="varname"><var class="varname">pending</var></var> </span> <dd> <p class="para"> The number of pending watchers. <strong><code>0</code></strong> indicates that there are no watchers pending. </p> </dd> </dt> <dt id="evloop.props.io-interval"> <span class="term"> <var class="varname"><var class="varname">io_interval</var></var> </span> <dd> <p class="para"> Higher <var class="varname"><var class="varname">io_interval</var></var> allows <em class="emphasis">libev</em> to spend more time collecting <a href="class.evio.html" class="classname">EvIo</a> events, so more events can be handled per iteration, at the cost of increasing latency. Timeouts (both <a href="class.evperiodic.html" class="classname">EvPeriodic</a> and <a href="class.evtimer.html" class="classname">EvTimer</a> ) will not be affected. Setting this to a non-zero value will introduce an additional <em>sleep()</em> call into most loop iterations. The sleep time ensures that <em class="emphasis">libev</em> will not poll for <a href="class.evio.html" class="classname">EvIo</a> events events more often than once per this interval, on average. Many programs can usually benefit by setting the <var class="varname"><var class="varname">io_interval</var></var> to a value near <strong><code>0.1</code></strong> , which is often enough for interactive servers(not for games). It usually doesn't make much sense to set it to a lower value than <strong><code>0.01</code></strong> , as this approaches the timing granularity of most systems. </p> <p class="para"> See also <a href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#FUNCTIONS_CONTROLLING_EVENT_LOOPS" class="link external">» FUNCTIONS CONTROLLING EVENT LOOPS</a> . </p> </dd> </dt> <dt id="evloop.props.timeout-interval"> <span class="term"> <var class="varname"><var class="varname">timeout_interval</var></var> </span> <dd> <p class="para"> Higher <var class="varname"><var class="varname">timeout_interval</var></var> allows <em class="emphasis">libev</em> to spend more time collecting timeouts, at the expense of increased latency/jitter/inexactness(the watcher callback will be called later). <a href="class.evio.html" class="classname">EvIo</a> watchers will not be affected. Setting this to a non-null value will not introduce any overhead in <em class="emphasis">libev</em> . See also <a href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#FUNCTIONS_CONTROLLING_EVENT_LOOPS" class="link external">» FUNCTIONS CONTROLLING EVENT LOOPS</a> . </p> </dd> </dt> <dt id="evloop.props.depth"> <span class="term"> <var class="varname"><var class="varname">depth</var></var> </span> <dd> <p class="para"> The recursion depth. See <span class="methodname"><a href="ev.depth.html" class="methodname">Ev::depth()</a></span> . </p> </dd> </dt> </dl> </div> </div> <h2>Table of Contents</h2><ul class="chunklist chunklist_reference"><li><a href="evloop.backend.html">EvLoop::backend</a> — Returns an integer describing the backend used by libev.</li><li><a href="evloop.check.html">EvLoop::check</a> — Creates EvCheck object associated with the current event loop instance</li><li><a href="evloop.child.html">EvLoop::child</a> — Creates EvChild object associated with the current event loop</li><li><a href="evloop.construct.html">EvLoop::__construct</a> — Constructs the event loop object</li><li><a href="evloop.defaultloop.html">EvLoop::defaultLoop</a> — Returns or creates the default event loop.</li><li><a href="evloop.embed.html">EvLoop::embed</a> — Creates an instance of EvEmbed watcher associated with the current EvLoop object.</li><li><a href="evloop.fork.html">EvLoop::fork</a> — Creates EvFork watcher object associated with the current event loop instance</li><li><a href="evloop.idle.html">EvLoop::idle</a> — Creates EvIdle watcher object associated with the current event loop instance</li><li><a href="evloop.invokepending.html">EvLoop::invokePending</a> — Invoke all pending watchers while resetting their pending state</li><li><a href="evloop.io.html">EvLoop::io</a> — Create EvIo watcher object associated with the current event loop instance</li><li><a href="evloop.loopfork.html">EvLoop::loopFork</a> — Must be called after a fork</li><li><a href="evloop.now.html">EvLoop::now</a> — Returns the current "event loop time"</li><li><a href="evloop.nowupdate.html">EvLoop::nowUpdate</a> — Establishes the current time by querying the kernel, updating the time returned by EvLoop::now in the progress.</li><li><a href="evloop.periodic.html">EvLoop::periodic</a> — Creates EvPeriodic watcher object associated with the current event loop instance</li><li><a href="evloop.prepare.html">EvLoop::prepare</a> — Creates EvPrepare watcher object associated with the current event loop instance</li><li><a href="evloop.resume.html">EvLoop::resume</a> — Resume previously suspended default event loop</li><li><a href="evloop.run.html">EvLoop::run</a> — Begin checking for events and calling callbacks for the loop</li><li><a href="evloop.signal.html">EvLoop::signal</a> — Creates EvSignal watcher object associated with the current event loop instance</li><li><a href="evloop.stat.html">EvLoop::stat</a> — Creates EvStat watcher object associated with the current event loop instance</li><li><a href="evloop.stop.html">EvLoop::stop</a> — Stops the event loop</li><li><a href="evloop.suspend.html">EvLoop::suspend</a> — Suspend the loop</li><li><a href="evloop.timer.html">EvLoop::timer</a> — Creates EvTimer watcher object associated with the current event loop instance</li><li><a href="evloop.verify.html">EvLoop::verify</a> — Performs internal consistency checks(for debugging)</li></ul> </div> <hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="evio.set.html">EvIo::set</a></div> <div class="next" style="text-align: right; float: right;"><a href="evloop.backend.html">EvLoop::backend</a></div> <div class="up"><a href="book.ev.html">Ev</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>