X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/6800c1e86d28e4bc573747e6d327c770b2e00df4..bd14babf134e551f28f49193bf20705933c772c8:/ev.html?ds=inline diff --git a/ev.html b/ev.html index 5bcffd0..bb4c00e 100644 --- a/ev.html +++ b/ev.html @@ -6,7 +6,7 @@ - +
@@ -68,7 +68,47 @@#include <ev.h> +/* this is the only header you need */ + #include <ev.h> + + /* what follows is a fully working example program */ + ev_io stdin_watcher; + ev_timer timeout_watcher; + + /* called when data 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 */ + } + + static void + timeout_cb (EV_P_ struct ev_timer *w, int revents) + { + /* puts ("timeout"); */ + ev_unloop (EV_A_ EVUNLOOP_ONE); /* leave one loop call */ + } + + int + main (void) + { + struct ev_loop *loop = ev_default_loop (0); + + /* initialise an io watcher, then start it */ + 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 */ + ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.); + ev_timer_start (loop, &timeout_watcher); + + /* loop till timeout or data ready */ + ev_loop (loop, 0); + + return 0; + }@@ -181,20 +221,20 @@ might be supported on the current system, you would need to look at recommended ones.See the description of
-ev_embed
watchers for more info.
Sets the allocation function to use (the prototype is similar to the -realloc C function, the semantics are identical). It is used to allocate -and free memory (no surprises here). If it returns zero when memory -needs to be allocated, the library might abort or take some potentially -destructive action. The default is your system realloc function.
+Sets the allocation function to use (the prototype and semantics are +identical to the realloc C function). It is used to allocate and free +memory (no surprises here). If it returns zero when memory needs to be +allocated, the library might abort or take some potentially destructive +action. The default is your system realloc function.
You could override this function in high-availability programs to, say, free some memory if it cannot allocate memory, to use a special allocator, or even to sleep a while and retry until some memory is available.
Example: replace the libev allocator with one that waits a bit and then retries: better than mine).
static void * - persistent_realloc (void *ptr, long size) + persistent_realloc (void *ptr, size_t size) { for (;;) {