… | |
… | |
53 | The newest version of this document is also available as a html-formatted |
53 | The newest version of this document is also available as a html-formatted |
54 | web page you might find easier to navigate when reading it for the first |
54 | web page you might find easier to navigate when reading it for the first |
55 | time: L<http://cvs.schmorp.de/libev/ev.html>. |
55 | time: L<http://cvs.schmorp.de/libev/ev.html>. |
56 | |
56 | |
57 | Libev is an event loop: you register interest in certain events (such as a |
57 | Libev is an event loop: you register interest in certain events (such as a |
58 | file descriptor being readable or a timeout occuring), and it will manage |
58 | file descriptor being readable or a timeout occurring), and it will manage |
59 | these event sources and provide your program with events. |
59 | these event sources and provide your program with events. |
60 | |
60 | |
61 | To do this, it must take more or less complete control over your process |
61 | To do this, it must take more or less complete control over your process |
62 | (or thread) by executing the I<event loop> handler, and will then |
62 | (or thread) by executing the I<event loop> handler, and will then |
63 | communicate events via a callback mechanism. |
63 | communicate events via a callback mechanism. |
… | |
… | |
469 | |
469 | |
470 | Returns the current "event loop time", which is the time the event loop |
470 | Returns the current "event loop time", which is the time the event loop |
471 | received events and started processing them. This timestamp does not |
471 | received events and started processing them. This timestamp does not |
472 | change as long as callbacks are being processed, and this is also the base |
472 | change as long as callbacks are being processed, and this is also the base |
473 | time used for relative timers. You can treat it as the timestamp of the |
473 | time used for relative timers. You can treat it as the timestamp of the |
474 | event occuring (or more correctly, libev finding out about it). |
474 | event occurring (or more correctly, libev finding out about it). |
475 | |
475 | |
476 | =item ev_loop (loop, int flags) |
476 | =item ev_loop (loop, int flags) |
477 | |
477 | |
478 | Finally, this is it, the event handler. This function usually is called |
478 | Finally, this is it, the event handler. This function usually is called |
479 | after you initialised all your watchers and you want to start handling |
479 | after you initialised all your watchers and you want to start handling |
… | |
… | |
1791 | |
1791 | |
1792 | Make a single, non-blocking sweep over the embedded loop. This works |
1792 | Make a single, non-blocking sweep over the embedded loop. This works |
1793 | similarly to C<ev_loop (embedded_loop, EVLOOP_NONBLOCK)>, but in the most |
1793 | similarly to C<ev_loop (embedded_loop, EVLOOP_NONBLOCK)>, but in the most |
1794 | apropriate way for embedded loops. |
1794 | apropriate way for embedded loops. |
1795 | |
1795 | |
1796 | =item struct ev_loop *loop [read-only] |
1796 | =item struct ev_loop *other [read-only] |
1797 | |
1797 | |
1798 | The embedded event loop. |
1798 | The embedded event loop. |
1799 | |
1799 | |
1800 | =back |
1800 | =back |
1801 | |
1801 | |
… | |
… | |
2140 | Libev can (and often is) directly embedded into host |
2140 | Libev can (and often is) directly embedded into host |
2141 | applications. Examples of applications that embed it include the Deliantra |
2141 | applications. Examples of applications that embed it include the Deliantra |
2142 | Game Server, the EV perl module, the GNU Virtual Private Ethernet (gvpe) |
2142 | Game Server, the EV perl module, the GNU Virtual Private Ethernet (gvpe) |
2143 | and rxvt-unicode. |
2143 | and rxvt-unicode. |
2144 | |
2144 | |
2145 | The goal is to enable you to just copy the neecssary files into your |
2145 | The goal is to enable you to just copy the necessary files into your |
2146 | source directory without having to change even a single line in them, so |
2146 | source directory without having to change even a single line in them, so |
2147 | you can easily upgrade by simply copying (or having a checked-out copy of |
2147 | you can easily upgrade by simply copying (or having a checked-out copy of |
2148 | libev somewhere in your source tree). |
2148 | libev somewhere in your source tree). |
2149 | |
2149 | |
2150 | =head2 FILESETS |
2150 | =head2 FILESETS |
… | |
… | |
2240 | |
2240 | |
2241 | If defined to be C<1>, libev will try to detect the availability of the |
2241 | If defined to be C<1>, libev will try to detect the availability of the |
2242 | monotonic clock option at both compiletime and runtime. Otherwise no use |
2242 | monotonic clock option at both compiletime and runtime. Otherwise no use |
2243 | of the monotonic clock option will be attempted. If you enable this, you |
2243 | of the monotonic clock option will be attempted. If you enable this, you |
2244 | usually have to link against librt or something similar. Enabling it when |
2244 | usually have to link against librt or something similar. Enabling it when |
2245 | the functionality isn't available is safe, though, althoguh you have |
2245 | the functionality isn't available is safe, though, although you have |
2246 | to make sure you link against any libraries where the C<clock_gettime> |
2246 | to make sure you link against any libraries where the C<clock_gettime> |
2247 | function is hiding in (often F<-lrt>). |
2247 | function is hiding in (often F<-lrt>). |
2248 | |
2248 | |
2249 | =item EV_USE_REALTIME |
2249 | =item EV_USE_REALTIME |
2250 | |
2250 | |
… | |
… | |
2440 | |
2440 | |
2441 | =item ev_set_cb (ev, cb) |
2441 | =item ev_set_cb (ev, cb) |
2442 | |
2442 | |
2443 | Can be used to change the callback member declaration in each watcher, |
2443 | Can be used to change the callback member declaration in each watcher, |
2444 | and the way callbacks are invoked and set. Must expand to a struct member |
2444 | and the way callbacks are invoked and set. Must expand to a struct member |
2445 | definition and a statement, respectively. See the F<ev.v> header file for |
2445 | definition and a statement, respectively. See the F<ev.c> header file for |
2446 | their default definitions. One possible use for overriding these is to |
2446 | their default definitions. One possible use for overriding these is to |
2447 | avoid the C<struct ev_loop *> as first argument in all cases, or to use |
2447 | avoid the C<struct ev_loop *> as first argument in all cases, or to use |
2448 | method calls instead of plain function calls in C++. |
2448 | method calls instead of plain function calls in C++. |
2449 | |
2449 | |
2450 | =head2 EXPORTED API SYMBOLS |
2450 | =head2 EXPORTED API SYMBOLS |
… | |
… | |
2458 | |
2458 | |
2459 | This can also be used to rename all public symbols to avoid clashes with |
2459 | This can also be used to rename all public symbols to avoid clashes with |
2460 | multiple versions of libev linked together (which is obviously bad in |
2460 | multiple versions of libev linked together (which is obviously bad in |
2461 | itself, but sometimes it is inconvinient to avoid this). |
2461 | itself, but sometimes it is inconvinient to avoid this). |
2462 | |
2462 | |
2463 | A sed comamnd like this will create wrapper C<#define>'s that you need to |
2463 | A sed command like this will create wrapper C<#define>'s that you need to |
2464 | include before including F<ev.h>: |
2464 | include before including F<ev.h>: |
2465 | |
2465 | |
2466 | <Symbols.ev sed -e "s/.*/#define & myprefix_&/" >wrap.h |
2466 | <Symbols.ev sed -e "s/.*/#define & myprefix_&/" >wrap.h |
2467 | |
2467 | |
2468 | This would create a file F<wrap.h> which essentially looks like this: |
2468 | This would create a file F<wrap.h> which essentially looks like this: |