ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.html
(Generate patch)

Comparing libev/ev.html (file contents):
Revision 1.63 by root, Thu Nov 29 20:05:59 2007 UTC vs.
Revision 1.64 by root, Fri Dec 7 16:49:49 2007 UTC

4<head> 4<head>
5 <title>libev</title> 5 <title>libev</title>
6 <meta name="description" content="Pod documentation for libev" /> 6 <meta name="description" content="Pod documentation for libev" />
7 <meta name="inputfile" content="&lt;standard input&gt;" /> 7 <meta name="inputfile" content="&lt;standard input&gt;" />
8 <meta name="outputfile" content="&lt;standard output&gt;" /> 8 <meta name="outputfile" content="&lt;standard output&gt;" />
9 <meta name="created" content="Thu Nov 29 21:05:58 2007" /> 9 <meta name="created" content="Fri Dec 7 17:49:47 2007" />
10 <meta name="generator" content="Pod::Xhtml 1.57" /> 10 <meta name="generator" content="Pod::Xhtml 1.57" />
11<link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head> 11<link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head>
12<body> 12<body>
13<div class="pod"> 13<div class="pod">
14<!-- INDEX START --> 14<!-- INDEX START -->
333 <p>Instead of calling <code>ev_default_fork</code> or <code>ev_loop_fork</code> manually after 333 <p>Instead of calling <code>ev_default_fork</code> or <code>ev_loop_fork</code> manually after
334a fork, you can also make libev check for a fork in each iteration by 334a fork, you can also make libev check for a fork in each iteration by
335enabling this flag.</p> 335enabling this flag.</p>
336 <p>This works by calling <code>getpid ()</code> on every iteration of the loop, 336 <p>This works by calling <code>getpid ()</code> on every iteration of the loop,
337and thus this might slow down your event loop if you do a lot of loop 337and thus this might slow down your event loop if you do a lot of loop
338iterations and little real work, but is usually not noticable (on my 338iterations and little real work, but is usually not noticeable (on my
339Linux system for example, <code>getpid</code> is actually a simple 5-insn sequence 339Linux system for example, <code>getpid</code> is actually a simple 5-insn sequence
340without a syscall and thus <i>very</i> fast, but my Linux system also has 340without a syscall and thus <i>very</i> fast, but my Linux system also has
341<code>pthread_atfork</code> which is even faster).</p> 341<code>pthread_atfork</code> which is even faster).</p>
342 <p>The big advantage of this flag is that you can forget about fork (and 342 <p>The big advantage of this flag is that you can forget about fork (and
343forget about forgetting to tell libev about forking) when you use this 343forget about forgetting to tell libev about forking) when you use this
481 <dd> 481 <dd>
482 <p>Like <code>ev_default_fork</code>, but acts on an event loop created by 482 <p>Like <code>ev_default_fork</code>, but acts on an event loop created by
483<code>ev_loop_new</code>. Yes, you have to call this on every allocated event loop 483<code>ev_loop_new</code>. Yes, you have to call this on every allocated event loop
484after fork, and how you do this is entirely your own problem.</p> 484after fork, and how you do this is entirely your own problem.</p>
485 </dd> 485 </dd>
486 <dt>unsigned int ev_loop_count (loop)</dt>
487 <dd>
488 <p>Returns the count of loop iterations for the loop, which is identical to
489the number of times libev did poll for new events. It starts at <code>0</code> and
490happily wraps around with enough iterations.</p>
491 <p>This value can sometimes be useful as a generation counter of sorts (it
492&quot;ticks&quot; the number of loop iterations), as it roughly corresponds with
493<code>ev_prepare</code> and <code>ev_check</code> calls.</p>
494 </dd>
486 <dt>unsigned int ev_backend (loop)</dt> 495 <dt>unsigned int ev_backend (loop)</dt>
487 <dd> 496 <dd>
488 <p>Returns one of the <code>EVBACKEND_*</code> flags indicating the event backend in 497 <p>Returns one of the <code>EVBACKEND_*</code> flags indicating the event backend in
489use.</p> 498use.</p>
490 </dd> 499 </dd>
769 <dt>ev_cb_set (ev_TYPE *watcher, callback)</dt> 778 <dt>ev_cb_set (ev_TYPE *watcher, callback)</dt>
770 <dd> 779 <dd>
771 <p>Change the callback. You can change the callback at virtually any time 780 <p>Change the callback. You can change the callback at virtually any time
772(modulo threads).</p> 781(modulo threads).</p>
773 </dd> 782 </dd>
783 <dt>ev_set_priority (ev_TYPE *watcher, priority)</dt>
784 <dt>int ev_priority (ev_TYPE *watcher)</dt>
785 <dd>
786 <p>Set and query the priority of the watcher. The priority is a small
787integer between <code>EV_MAXPRI</code> (default: <code>2</code>) and <code>EV_MINPRI</code>
788(default: <code>-2</code>). Pending watchers with higher priority will be invoked
789before watchers with lower priority, but priority will not keep watchers
790from being executed (except for <code>ev_idle</code> watchers).</p>
791 <p>This means that priorities are <i>only</i> used for ordering callback
792invocation after new events have been received. This is useful, for
793example, to reduce latency after idling, or more often, to bind two
794watchers on the same event and make sure one is called first.</p>
795 <p>If you need to suppress invocation when higher priority events are pending
796you need to look at <code>ev_idle</code> watchers, which provide this functionality.</p>
797 <p>The default priority used by watchers when no priority has been set is
798always <code>0</code>, which is supposed to not be too high and not be too low :).</p>
799 <p>Setting a priority outside the range of <code>EV_MINPRI</code> to <code>EV_MAXPRI</code> is
800fine, as long as you do not mind that the priority value you query might
801or might not have been adjusted to be within valid range.</p>
802 </dd>
774</dl> 803</dl>
775 804
776 805
777 806
778 807
1358</pre> 1387</pre>
1359 1388
1360</div> 1389</div>
1361<h2 id="code_ev_idle_code_when_you_ve_got_no"><code>ev_idle</code> - when you've got nothing better to do...</h2> 1390<h2 id="code_ev_idle_code_when_you_ve_got_no"><code>ev_idle</code> - when you've got nothing better to do...</h2>
1362<div id="code_ev_idle_code_when_you_ve_got_no-2"> 1391<div id="code_ev_idle_code_when_you_ve_got_no-2">
1363<p>Idle watchers trigger events when there are no other events are pending 1392<p>Idle watchers trigger events when no other events of the same or higher
1364(prepare, check and other idle watchers do not count). That is, as long 1393priority are pending (prepare, check and other idle watchers do not
1365as your process is busy handling sockets or timeouts (or even signals, 1394count).</p>
1366imagine) it will not be triggered. But when your process is idle all idle 1395<p>That is, as long as your process is busy handling sockets or timeouts
1367watchers are being called again and again, once per event loop iteration - 1396(or even signals, imagine) of the same or higher priority it will not be
1397triggered. But when your process is idle (or only lower-priority watchers
1398are pending), the idle watchers are being called once per event loop
1368until stopped, that is, or your process receives more events and becomes 1399iteration - until stopped, that is, or your process receives more events
1369busy.</p> 1400and becomes busy again with higher priority stuff.</p>
1370<p>The most noteworthy effect is that as long as any idle watchers are 1401<p>The most noteworthy effect is that as long as any idle watchers are
1371active, the process will not block when waiting for new events.</p> 1402active, the process will not block when waiting for new events.</p>
1372<p>Apart from keeping your process non-blocking (which is a useful 1403<p>Apart from keeping your process non-blocking (which is a useful
1373effect on its own sometimes), idle watchers are a good place to do 1404effect on its own sometimes), idle watchers are a good place to do
1374&quot;pseudo-background processing&quot;, or delay processing stuff to after the 1405&quot;pseudo-background processing&quot;, or delay processing stuff to after the
1464 1495
1465 // create io watchers for each fd and a timer before blocking 1496 // create io watchers for each fd and a timer before blocking
1466 static void 1497 static void
1467 adns_prepare_cb (ev_loop *loop, ev_prepare *w, int revents) 1498 adns_prepare_cb (ev_loop *loop, ev_prepare *w, int revents)
1468 { 1499 {
1469 int timeout = 3600000;truct pollfd fds [nfd]; 1500 int timeout = 3600000;
1501 struct pollfd fds [nfd];
1470 // actual code will need to loop here and realloc etc. 1502 // actual code will need to loop here and realloc etc.
1471 adns_beforepoll (ads, fds, &amp;nfd, &amp;timeout, timeval_from (ev_time ())); 1503 adns_beforepoll (ads, fds, &amp;nfd, &amp;timeout, timeval_from (ev_time ()));
1472 1504
1473 /* the callback is illegal, but won't be called as we stop during check */ 1505 /* the callback is illegal, but won't be called as we stop during check */
1474 ev_timer_init (&amp;tw, 0, timeout * 1e-3); 1506 ev_timer_init (&amp;tw, 0, timeout * 1e-3);
2084 <dd> 2116 <dd>
2085 <p>If undefined or defined to be <code>1</code>, then periodic timers are supported. If 2117 <p>If undefined or defined to be <code>1</code>, then periodic timers are supported. If
2086defined to be <code>0</code>, then they are not. Disabling them saves a few kB of 2118defined to be <code>0</code>, then they are not. Disabling them saves a few kB of
2087code.</p> 2119code.</p>
2088 </dd> 2120 </dd>
2121 <dt>EV_IDLE_ENABLE</dt>
2122 <dd>
2123 <p>If undefined or defined to be <code>1</code>, then idle watchers are supported. If
2124defined to be <code>0</code>, then they are not. Disabling them saves a few kB of
2125code.</p>
2126 </dd>
2089 <dt>EV_EMBED_ENABLE</dt> 2127 <dt>EV_EMBED_ENABLE</dt>
2090 <dd> 2128 <dd>
2091 <p>If undefined or defined to be <code>1</code>, then embed watchers are supported. If 2129 <p>If undefined or defined to be <code>1</code>, then embed watchers are supported. If
2092defined to be <code>0</code>, then they are not.</p> 2130defined to be <code>0</code>, then they are not.</p>
2093 </dd> 2131 </dd>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines