… | |
… | |
3188 | atexit (program_exits); |
3188 | atexit (program_exits); |
3189 | |
3189 | |
3190 | |
3190 | |
3191 | =head2 C<ev_async> - how to wake up an event loop |
3191 | =head2 C<ev_async> - how to wake up an event loop |
3192 | |
3192 | |
3193 | In general, you cannot use an C<ev_run> from multiple threads or other |
3193 | In general, you cannot use an C<ev_loop> from multiple threads or other |
3194 | asynchronous sources such as signal handlers (as opposed to multiple event |
3194 | asynchronous sources such as signal handlers (as opposed to multiple event |
3195 | loops - those are of course safe to use in different threads). |
3195 | loops - those are of course safe to use in different threads). |
3196 | |
3196 | |
3197 | Sometimes, however, you need to wake up an event loop you do not control, |
3197 | Sometimes, however, you need to wake up an event loop you do not control, |
3198 | for example because it belongs to another thread. This is what C<ev_async> |
3198 | for example because it belongs to another thread. This is what C<ev_async> |
… | |
… | |
3308 | trust me. |
3308 | trust me. |
3309 | |
3309 | |
3310 | =item ev_async_send (loop, ev_async *) |
3310 | =item ev_async_send (loop, ev_async *) |
3311 | |
3311 | |
3312 | Sends/signals/activates the given C<ev_async> watcher, that is, feeds |
3312 | Sends/signals/activates the given C<ev_async> watcher, that is, feeds |
3313 | an C<EV_ASYNC> event on the watcher into the event loop. Unlike |
3313 | an C<EV_ASYNC> event on the watcher into the event loop, and instanlty |
|
|
3314 | returns. |
|
|
3315 | |
3314 | C<ev_feed_event>, this call is safe to do from other threads, signal or |
3316 | Unlike C<ev_feed_event>, this call is safe to do from other threads, |
3315 | similar contexts (see the discussion of C<EV_ATOMIC_T> in the embedding |
3317 | signal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the |
3316 | section below on what exactly this means). |
3318 | embedding section below on what exactly this means). |
3317 | |
3319 | |
3318 | Note that, as with other watchers in libev, multiple events might get |
3320 | Note that, as with other watchers in libev, multiple events might get |
3319 | compressed into a single callback invocation (another way to look at this |
3321 | compressed into a single callback invocation (another way to look at this |
3320 | is that C<ev_async> watchers are level-triggered, set on C<ev_async_send>, |
3322 | is that C<ev_async> watchers are level-triggered, set on C<ev_async_send>, |
3321 | reset when the event loop detects that). |
3323 | reset when the event loop detects that). |