Browse Source

*** empty log message ***

master
Marc Alexander Lehmann 13 years ago
parent
commit
99c2f13076
  1. 57
      ev.pod

57
ev.pod

@ -8,49 +8,63 @@ libev - a high performance full-featured event loop written in C
=head2 EXAMPLE PROGRAM
// a single header file is required
#include <ev.h>
// every watcher type has its own typedef'd struct
// with the name ev_<type>
ev_io stdin_watcher;
ev_timer timeout_watcher;
/* called when data readable on stdin */
// all watcher callbacks have a similar signature
// this callback is called when data is readable on stdin
static void
stdin_cb (EV_P_ struct ev_io *w, int revents)
{
/* puts ("stdin ready"); */
ev_io_stop (EV_A_ w); /* just a syntax example */
ev_unloop (EV_A_ EVUNLOOP_ALL); /* leave all loop calls */
puts ("stdin ready");
// for one-shot events, one must manually stop the watcher
// with its corresponding stop function.
ev_io_stop (EV_A_ w);
// this causes all nested ev_loop's to stop iterating
ev_unloop (EV_A_ EVUNLOOP_ALL);
}
// another callback, this time for a time-out
static void
timeout_cb (EV_P_ struct ev_timer *w, int revents)
{
/* puts ("timeout"); */
ev_unloop (EV_A_ EVUNLOOP_ONE); /* leave one loop call */
puts ("timeout");
// this causes the innermost ev_loop to stop iterating
ev_unloop (EV_A_ EVUNLOOP_ONE);
}
int
main (void)
{
// use the default event loop unless you have special needs
struct ev_loop *loop = ev_default_loop (0);
/* initialise an io watcher, then start it */
// initialise an io watcher, then start it
// this one will watch for stdin to become readable
ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
ev_io_start (loop, &stdin_watcher);
/* simple non-repeating 5.5 second timeout */
// initialise a timer watcher, then start it
// simple non-repeating 5.5 second timeout
ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
ev_timer_start (loop, &timeout_watcher);
/* loop till timeout or data ready */
// now wait for events to arrive
ev_loop (loop, 0);
// unloop was called, so exit
return 0;
}
=head1 DESCRIPTION
The newest version of this document is also available as a html-formatted
The newest version of this document is also available as an html-formatted
web page you might find easier to navigate when reading it for the first
time: L<http://cvs.schmorp.de/libev/ev.html>.
@ -86,12 +100,13 @@ for example).
=head2 CONVENTIONS
Libev is very configurable. In this manual the default configuration will
be described, which supports multiple event loops. For more info about
various configuration options please have a look at B<EMBED> section in
this manual. If libev was configured without support for multiple event
loops, then all functions taking an initial argument of name C<loop>
(which is always of type C<struct ev_loop *>) will not have this argument.
Libev is very configurable. In this manual the default (and most common)
configuration will be described, which supports multiple event loops. For
more info about various configuration options please have a look at
B<EMBED> section in this manual. If libev was configured without support
for multiple event loops, then all functions taking an initial argument of
name C<loop> (which is always of type C<struct ev_loop *>) will not have
this argument.
=head2 TIME REPRESENTATION
@ -299,8 +314,8 @@ enabling this flag.
This works by calling C<getpid ()> 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 noticeable (on my
Linux system for example, C<getpid> is actually a simple 5-insn sequence
without a syscall and thus I<very> fast, but my Linux system also has
GNU/Linux system for example, C<getpid> is actually a simple 5-insn sequence
without a syscall and thus I<very> fast, but my GNU/Linux system also has
C<pthread_atfork> which is even faster).
The big advantage of this flag is that you can forget about fork (and
@ -1421,6 +1436,12 @@ as you don't register any with libev). Similarly, when the last signal
watcher for a signal is stopped libev will reset the signal handler to
SIG_DFL (regardless of what it was set to before).
If possible and supported, libev will install its handlers with
C<SA_RESTART> behaviour enabled, so syscalls should not be unduly
interrupted. If you have a problem with syscalls getting interrupted by
signals you can block all signals in an C<ev_check> watcher and unblock
them in an C<ev_prepare> watcher.
=head3 Watcher-Specific Functions and Data Members
=over 4

Loading…
Cancel
Save