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

Comparing libev/ev.pod (file contents):
Revision 1.374 by sf-exg, Sat Jun 4 16:54:59 2011 UTC vs.
Revision 1.379 by root, Tue Jul 12 23:32:10 2011 UTC

608among the OS-specific backends (I vastly prefer correctness over speed 608among the OS-specific backends (I vastly prefer correctness over speed
609hacks). 609hacks).
610 610
611On the negative side, the interface is I<bizarre> - so bizarre that 611On the negative side, the interface is I<bizarre> - so bizarre that
612even sun itself gets it wrong in their code examples: The event polling 612even sun itself gets it wrong in their code examples: The event polling
613function sometimes returning events to the caller even though an error 613function sometimes returns events to the caller even though an error
614occurred, but with no indication whether it has done so or not (yes, it's 614occurred, but with no indication whether it has done so or not (yes, it's
615even documented that way) - deadly for edge-triggered interfaces where 615even documented that way) - deadly for edge-triggered interfaces where you
616you absolutely have to know whether an event occurred or not because you 616absolutely have to know whether an event occurred or not because you have
617have to re-arm the watcher. 617to re-arm the watcher.
618 618
619Fortunately libev seems to be able to work around these idiocies. 619Fortunately libev seems to be able to work around these idiocies.
620 620
621This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 621This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
622C<EVBACKEND_POLL>. 622C<EVBACKEND_POLL>.
2023keep up with the timer (because it takes longer than those 10 seconds to 2023keep up with the timer (because it takes longer than those 10 seconds to
2024do stuff) the timer will not fire more than once per event loop iteration. 2024do stuff) the timer will not fire more than once per event loop iteration.
2025 2025
2026=item ev_timer_again (loop, ev_timer *) 2026=item ev_timer_again (loop, ev_timer *)
2027 2027
2028This will act as if the timer timed out and restart it again if it is 2028This will act as if the timer timed out and restarts it again if it is
2029repeating. The exact semantics are: 2029repeating. The exact semantics are:
2030 2030
2031If the timer is pending, its pending status is cleared. 2031If the timer is pending, its pending status is cleared.
2032 2032
2033If the timer is started but non-repeating, stop it (as if it timed out). 2033If the timer is started but non-repeating, stop it (as if it timed out).
3220C<ev_async_sent> calls). In fact, you could use signal watchers as a kind 3220C<ev_async_sent> calls). In fact, you could use signal watchers as a kind
3221of "global async watchers" by using a watcher on an otherwise unused 3221of "global async watchers" by using a watcher on an otherwise unused
3222signal, and C<ev_feed_signal> to signal this watcher from another thread, 3222signal, and C<ev_feed_signal> to signal this watcher from another thread,
3223even without knowing which loop owns the signal. 3223even without knowing which loop owns the signal.
3224 3224
3225Unlike C<ev_signal> watchers, C<ev_async> works with any event loop, not
3226just the default loop.
3227
3228=head3 Queueing 3225=head3 Queueing
3229 3226
3230C<ev_async> does not support queueing of data in any way. The reason 3227C<ev_async> does not support queueing of data in any way. The reason
3231is that the author does not know of a simple (or any) algorithm for a 3228is that the author does not know of a simple (or any) algorithm for a
3232multiple-writer-single-reader queue that works in all cases and doesn't 3229multiple-writer-single-reader queue that works in all cases and doesn't
3331Unlike C<ev_feed_event>, this call is safe to do from other threads, 3328Unlike C<ev_feed_event>, this call is safe to do from other threads,
3332signal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the 3329signal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the
3333embedding section below on what exactly this means). 3330embedding section below on what exactly this means).
3334 3331
3335Note that, as with other watchers in libev, multiple events might get 3332Note that, as with other watchers in libev, multiple events might get
3336compressed into a single callback invocation (another way to look at this 3333compressed into a single callback invocation (another way to look at
3337is that C<ev_async> watchers are level-triggered, set on C<ev_async_send>, 3334this is that C<ev_async> watchers are level-triggered: they are set on
3338reset when the event loop detects that). 3335C<ev_async_send>, reset when the event loop detects that).
3339 3336
3340This call incurs the overhead of a system call only once per event loop 3337This call incurs the overhead of at most one extra system call per event
3341iteration, so while the overhead might be noticeable, it doesn't apply to 3338loop iteration, if the event loop is blocked, and no syscall at all if
3342repeated calls to C<ev_async_send> for the same event loop. 3339the event loop (or your program) is processing events. That means that
3340repeated calls are basically free (there is no need to avoid calls for
3341performance reasons) and that the overhead becomes smaller (typically
3342zero) under load.
3343 3343
3344=item bool = ev_async_pending (ev_async *) 3344=item bool = ev_async_pending (ev_async *)
3345 3345
3346Returns a non-zero value when C<ev_async_send> has been called on the 3346Returns a non-zero value when C<ev_async_send> has been called on the
3347watcher but the event has not yet been processed (or even noted) by the 3347watcher but the event has not yet been processed (or even noted) by the
3944watchers in the constructor. 3944watchers in the constructor.
3945 3945
3946 class myclass 3946 class myclass
3947 { 3947 {
3948 ev::io io ; void io_cb (ev::io &w, int revents); 3948 ev::io io ; void io_cb (ev::io &w, int revents);
3949 ev::io2 io2 ; void io2_cb (ev::io &w, int revents); 3949 ev::io io2 ; void io2_cb (ev::io &w, int revents);
3950 ev::idle idle; void idle_cb (ev::idle &w, int revents); 3950 ev::idle idle; void idle_cb (ev::idle &w, int revents);
3951 3951
3952 myclass (int fd) 3952 myclass (int fd)
3953 { 3953 {
3954 io .set <myclass, &myclass::io_cb > (this); 3954 io .set <myclass, &myclass::io_cb > (this);
4005L<http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hlibev>. 4005L<http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hlibev>.
4006 4006
4007=item D 4007=item D
4008 4008
4009Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to 4009Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to
4010be found at L<http://proj.llucax.com.ar/wiki/evd>. 4010be found at L<http://www.llucax.com.ar/proj/ev.d/index.html>.
4011 4011
4012=item Ocaml 4012=item Ocaml
4013 4013
4014Erkki Seppala has written Ocaml bindings for libev, to be found at 4014Erkki Seppala has written Ocaml bindings for libev, to be found at
4015L<http://modeemi.cs.tut.fi/~flux/software/ocaml-ev/>. 4015L<http://modeemi.cs.tut.fi/~flux/software/ocaml-ev/>.
4369indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled. 4369indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.
4370 4370
4371=item EV_ATOMIC_T 4371=item EV_ATOMIC_T
4372 4372
4373Libev requires an integer type (suitable for storing C<0> or C<1>) whose 4373Libev requires an integer type (suitable for storing C<0> or C<1>) whose
4374access is atomic with respect to other threads or signal contexts. No such 4374access is atomic and serialised with respect to other threads or signal
4375type is easily found in the C language, so you can provide your own type 4375contexts. No such type is easily found in the C language, so you can
4376that you know is safe for your purposes. It is used both for signal handler "locking" 4376provide your own type that you know is safe for your purposes. It is used
4377as well as for signal and thread safety in C<ev_async> watchers. 4377both for signal handler "locking" as well as for signal and thread safety
4378in C<ev_async> watchers.
4378 4379
4379In the absence of this define, libev will use C<sig_atomic_t volatile> 4380In the absence of this define, libev will use C<sig_atomic_t volatile>
4380(from F<signal.h>), which is usually good enough on most platforms. 4381(from F<signal.h>), which is usually good enough on most platforms,
4382although strictly speaking using a type that also implies a memory fence
4383is required.
4381 4384
4382=item EV_H (h) 4385=item EV_H (h)
4383 4386
4384The name of the F<ev.h> header file used to include it. The default if 4387The name of the F<ev.h> header file used to include it. The default if
4385undefined is C<"ev.h"> in F<event.h>, F<ev.c> and F<ev++.h>. This can be 4388undefined is C<"ev.h"> in F<event.h>, F<ev.c> and F<ev++.h>. This can be
5047 5050
5048The type C<double> is used to represent timestamps. It is required to 5051The type C<double> is used to represent timestamps. It is required to
5049have at least 51 bits of mantissa (and 9 bits of exponent), which is 5052have at least 51 bits of mantissa (and 9 bits of exponent), which is
5050good enough for at least into the year 4000 with millisecond accuracy 5053good enough for at least into the year 4000 with millisecond accuracy
5051(the design goal for libev). This requirement is overfulfilled by 5054(the design goal for libev). This requirement is overfulfilled by
5052implementations using IEEE 754, which is basically all existing ones. With 5055implementations using IEEE 754, which is basically all existing ones.
5056
5053IEEE 754 doubles, you get microsecond accuracy until at least 2200. 5057With IEEE 754 doubles, you get microsecond accuracy until at least the
5058year 2255 (and millisecond accuray till the year 287396 - by then, libev
5059is either obsolete or somebody patched it to use C<long double> or
5060something like that, just kidding).
5054 5061
5055=back 5062=back
5056 5063
5057If you know of other additional requirements drop me a note. 5064If you know of other additional requirements drop me a note.
5058 5065
5120=item Processing ev_async_send: O(number_of_async_watchers) 5127=item Processing ev_async_send: O(number_of_async_watchers)
5121 5128
5122=item Processing signals: O(max_signal_number) 5129=item Processing signals: O(max_signal_number)
5123 5130
5124Sending involves a system call I<iff> there were no other C<ev_async_send> 5131Sending involves a system call I<iff> there were no other C<ev_async_send>
5125calls in the current loop iteration. Checking for async and signal events 5132calls in the current loop iteration and the loop is currently
5133blocked. Checking for async and signal events involves iterating over all
5126involves iterating over all running async watchers or all signal numbers. 5134running async watchers or all signal numbers.
5127 5135
5128=back 5136=back
5129 5137
5130 5138
5131=head1 PORTING FROM LIBEV 3.X TO 4.X 5139=head1 PORTING FROM LIBEV 3.X TO 4.X

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines