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

Comparing libev/ev.pod (file contents):
Revision 1.241 by root, Sat Apr 25 14:23:26 2009 UTC vs.
Revision 1.244 by root, Mon Jun 29 04:41:34 2009 UTC

1184 #include <stddef.h> 1184 #include <stddef.h>
1185 1185
1186 static void 1186 static void
1187 t1_cb (EV_P_ ev_timer *w, int revents) 1187 t1_cb (EV_P_ ev_timer *w, int revents)
1188 { 1188 {
1189 struct my_biggy big = (struct my_biggy * 1189 struct my_biggy big = (struct my_biggy *)
1190 (((char *)w) - offsetof (struct my_biggy, t1)); 1190 (((char *)w) - offsetof (struct my_biggy, t1));
1191 } 1191 }
1192 1192
1193 static void 1193 static void
1194 t2_cb (EV_P_ ev_timer *w, int revents) 1194 t2_cb (EV_P_ ev_timer *w, int revents)
1195 { 1195 {
1196 struct my_biggy big = (struct my_biggy * 1196 struct my_biggy big = (struct my_biggy *)
1197 (((char *)w) - offsetof (struct my_biggy, t2)); 1197 (((char *)w) - offsetof (struct my_biggy, t2));
1198 } 1198 }
1199 1199
1200=head2 WATCHER PRIORITY MODELS 1200=head2 WATCHER PRIORITY MODELS
1201 1201
1277 // with the default priority are receiving events. 1277 // with the default priority are receiving events.
1278 ev_idle_start (EV_A_ &idle); 1278 ev_idle_start (EV_A_ &idle);
1279 } 1279 }
1280 1280
1281 static void 1281 static void
1282 idle-cb (EV_P_ ev_idle *w, int revents) 1282 idle_cb (EV_P_ ev_idle *w, int revents)
1283 { 1283 {
1284 // actual processing 1284 // actual processing
1285 read (STDIN_FILENO, ...); 1285 read (STDIN_FILENO, ...);
1286 1286
1287 // have to start the I/O watcher again, as 1287 // have to start the I/O watcher again, as
1523C<after> argument to C<ev_timer_set>, and only ever use the C<repeat> 1523C<after> argument to C<ev_timer_set>, and only ever use the C<repeat>
1524member and C<ev_timer_again>. 1524member and C<ev_timer_again>.
1525 1525
1526At start: 1526At start:
1527 1527
1528 ev_timer_init (timer, callback); 1528 ev_init (timer, callback);
1529 timer->repeat = 60.; 1529 timer->repeat = 60.;
1530 ev_timer_again (loop, timer); 1530 ev_timer_again (loop, timer);
1531 1531
1532Each time there is some activity: 1532Each time there is some activity:
1533 1533
1595 1595
1596To start the timer, simply initialise the watcher and set C<last_activity> 1596To start the timer, simply initialise the watcher and set C<last_activity>
1597to the current time (meaning we just have some activity :), then call the 1597to the current time (meaning we just have some activity :), then call the
1598callback, which will "do the right thing" and start the timer: 1598callback, which will "do the right thing" and start the timer:
1599 1599
1600 ev_timer_init (timer, callback); 1600 ev_init (timer, callback);
1601 last_activity = ev_now (loop); 1601 last_activity = ev_now (loop);
1602 callback (loop, timer, EV_TIMEOUT); 1602 callback (loop, timer, EV_TIMEOUT);
1603 1603
1604And when there is some activity, simply store the current time in 1604And when there is some activity, simply store the current time in
1605C<last_activity>, no libev calls at all: 1605C<last_activity>, no libev calls at all:
2002some child status changes (most typically when a child of yours dies or 2002some child status changes (most typically when a child of yours dies or
2003exits). It is permissible to install a child watcher I<after> the child 2003exits). It is permissible to install a child watcher I<after> the child
2004has been forked (which implies it might have already exited), as long 2004has been forked (which implies it might have already exited), as long
2005as the event loop isn't entered (or is continued from a watcher), i.e., 2005as the event loop isn't entered (or is continued from a watcher), i.e.,
2006forking and then immediately registering a watcher for the child is fine, 2006forking and then immediately registering a watcher for the child is fine,
2007but forking and registering a watcher a few event loop iterations later is 2007but forking and registering a watcher a few event loop iterations later or
2008not. 2008in the next callback invocation is not.
2009 2009
2010Only the default event loop is capable of handling signals, and therefore 2010Only the default event loop is capable of handling signals, and therefore
2011you can only register child watchers in the default event loop. 2011you can only register child watchers in the default event loop.
2012 2012
2013=head3 Process Interaction 2013=head3 Process Interaction
2368 // no longer anything immediate to do. 2368 // no longer anything immediate to do.
2369 } 2369 }
2370 2370
2371 ev_idle *idle_watcher = malloc (sizeof (ev_idle)); 2371 ev_idle *idle_watcher = malloc (sizeof (ev_idle));
2372 ev_idle_init (idle_watcher, idle_cb); 2372 ev_idle_init (idle_watcher, idle_cb);
2373 ev_idle_start (loop, idle_cb); 2373 ev_idle_start (loop, idle_watcher);
2374 2374
2375 2375
2376=head2 C<ev_prepare> and C<ev_check> - customise your event loop! 2376=head2 C<ev_prepare> and C<ev_check> - customise your event loop!
2377 2377
2378Prepare and check watchers are usually (but not always) used in pairs: 2378Prepare and check watchers are usually (but not always) used in pairs:
2471 struct pollfd fds [nfd]; 2471 struct pollfd fds [nfd];
2472 // actual code will need to loop here and realloc etc. 2472 // actual code will need to loop here and realloc etc.
2473 adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ())); 2473 adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ()));
2474 2474
2475 /* the callback is illegal, but won't be called as we stop during check */ 2475 /* the callback is illegal, but won't be called as we stop during check */
2476 ev_timer_init (&tw, 0, timeout * 1e-3); 2476 ev_timer_init (&tw, 0, timeout * 1e-3, 0.);
2477 ev_timer_start (loop, &tw); 2477 ev_timer_start (loop, &tw);
2478 2478
2479 // create one ev_io per pollfd 2479 // create one ev_io per pollfd
2480 for (int i = 0; i < nfd; ++i) 2480 for (int i = 0; i < nfd; ++i)
2481 { 2481 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines