diff options
Diffstat (limited to 'ev.html')
| -rw-r--r-- | ev.html | 58 | 
1 files changed, 48 insertions, 10 deletions
@@ -6,7 +6,7 @@  	<meta name="description" content="Pod documentation for libev" />  	<meta name="inputfile" content="<standard input>" />  	<meta name="outputfile" content="<standard output>" /> -	<meta name="created" content="Thu Nov 29 21:05:58 2007" /> +	<meta name="created" content="Fri Dec  7 17:49:47 2007" />  	<meta name="generator" content="Pod::Xhtml 1.57" />  <link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head>  <body> @@ -335,7 +335,7 @@ a fork, you can also make libev check for a fork in each iteration by  enabling this flag.</p>  					<p>This works by calling <code>getpid ()</code> on every iteration of the loop,  and thus this might slow down your event loop if you do a lot of loop -iterations and little real work, but is usually not noticable (on my +iterations and little real work, but is usually not noticeable (on my  Linux system for example, <code>getpid</code> is actually a simple 5-insn sequence  without a syscall and thus <i>very</i> fast, but my Linux system also has  <code>pthread_atfork</code> which is even faster).</p> @@ -483,6 +483,15 @@ do not need to care.</p>  <code>ev_loop_new</code>. Yes, you have to call this on every allocated event loop  after fork, and how you do this is entirely your own problem.</p>  	</dd> +	<dt>unsigned int ev_loop_count (loop)</dt> +	<dd> +		<p>Returns the count of loop iterations for the loop, which is identical to +the number of times libev did poll for new events. It starts at <code>0</code> and +happily wraps around with enough iterations.</p> +		<p>This value can sometimes be useful as a generation counter of sorts (it +"ticks" the number of loop iterations), as it roughly corresponds with +<code>ev_prepare</code> and <code>ev_check</code> calls.</p> +	</dd>  	<dt>unsigned int ev_backend (loop)</dt>  	<dd>  		<p>Returns one of the <code>EVBACKEND_*</code> flags indicating the event backend in @@ -771,6 +780,26 @@ libev (e.g. you cnanot <code>free ()</code> it).</p>  		<p>Change the callback. You can change the callback at virtually any time  (modulo threads).</p>  	</dd> +	<dt>ev_set_priority (ev_TYPE *watcher, priority)</dt> +	<dt>int ev_priority (ev_TYPE *watcher)</dt> +	<dd> +		<p>Set and query the priority of the watcher. The priority is a small +integer between <code>EV_MAXPRI</code> (default: <code>2</code>) and <code>EV_MINPRI</code> +(default: <code>-2</code>). Pending watchers with higher priority will be invoked +before watchers with lower priority, but priority will not keep watchers +from being executed (except for <code>ev_idle</code> watchers).</p> +		<p>This means that priorities are <i>only</i> used for ordering callback +invocation after new events have been received. This is useful, for +example, to reduce latency after idling, or more often, to bind two +watchers on the same event and make sure one is called first.</p> +		<p>If you need to suppress invocation when higher priority events are pending +you need to look at <code>ev_idle</code> watchers, which provide this functionality.</p> +		<p>The default priority used by watchers when no priority has been set is +always <code>0</code>, which is supposed to not be too high and not be too low :).</p> +		<p>Setting a priority outside the range of <code>EV_MINPRI</code> to <code>EV_MAXPRI</code> is +fine, as long as you do not mind that the priority value you query might +or might not have been adjusted to be within valid range.</p> +	</dd>  </dl> @@ -1360,13 +1389,15 @@ was some error while <code>stat</code>ing the file.</p>  </div>  <h2 id="code_ev_idle_code_when_you_ve_got_no"><code>ev_idle</code> - when you've got nothing better to do...</h2>  <div id="code_ev_idle_code_when_you_ve_got_no-2"> -<p>Idle watchers trigger events when there are no other events are pending -(prepare, check and other idle watchers do not count). That is, as long -as your process is busy handling sockets or timeouts (or even signals, -imagine) it will not be triggered. But when your process is idle all idle -watchers are being called again and again, once per event loop iteration - -until stopped, that is, or your process receives more events and becomes -busy.</p> +<p>Idle watchers trigger events when no other events of the same or higher +priority are pending (prepare, check and other idle watchers do not +count).</p> +<p>That is, as long as your process is busy handling sockets or timeouts +(or even signals, imagine) of the same or higher priority it will not be +triggered. But when your process is idle (or only lower-priority watchers +are pending), the idle watchers are being called once per event loop +iteration - until stopped, that is, or your process receives more events +and becomes busy again with higher priority stuff.</p>  <p>The most noteworthy effect is that as long as any idle watchers are  active, the process will not block when waiting for new events.</p>  <p>Apart from keeping your process non-blocking (which is a useful @@ -1466,7 +1497,8 @@ pseudo-code only of course:</p>    static void    adns_prepare_cb (ev_loop *loop, ev_prepare *w, int revents)    { -    int timeout = 3600000;truct pollfd fds [nfd]; +    int timeout = 3600000; +    struct pollfd fds [nfd];      // actual code will need to loop here and realloc etc.      adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ())); @@ -2086,6 +2118,12 @@ argument. Instead, all functions act on the single default loop.</p>  defined to be <code>0</code>, then they are not. Disabling them saves a few kB of  code.</p>  	</dd> +	<dt>EV_IDLE_ENABLE</dt> +	<dd> +		<p>If undefined or defined to be <code>1</code>, then idle watchers are supported. If +defined to be <code>0</code>, then they are not. Disabling them saves a few kB of +code.</p> +	</dd>  	<dt>EV_EMBED_ENABLE</dt>  	<dd>  		<p>If undefined or defined to be <code>1</code>, then embed watchers are supported. If  | 
