On Fri, Apr 27, 2012 at 10:54:58PM +0400, Konstantin Osipov
<[email protected]> wrote:
> When event loop is not blocked (sleeping) ev_async_send() does not
> have to write to a pipe, even if executed from a different thread.
> In that case, what does it use, some sort of atomic?
>
> > using. The caveat is that multiple events fed to the same watcher can
> > be collapsed to a single event. Alternately, you could create a new
> > watcher, possibly a timer with zero timeout.
>
> OK, a timer with zero timeout looks safer than a watcher on a
> signal, since in the latter case there could be spurious wake-ups.
If you are within the same thread, and you want to wake up a specific
watcher, then ev_feed_event is the way to go, and you can do that on any
watcher, running or not (as zsbán pointed out).
You can use EV_CUSTOM, but you could also feed any other event - for
libev, it's just a bitset.
>From a different thread, ev_async is your only method (again, as zsbán
explained).
If you do it sometimes form the same or different thread, then you could
optimise it by using ev_feed_event form the same thread, on our async
watcher - libev has no "same thread" optimisation anywhere.
--
The choice of a Deliantra, the free code+content MORPG
-----==- _GNU_ http://www.deliantra.net
----==-- _ generation
---==---(_)__ __ ____ __ Marc Lehmann
--==---/ / _ \/ // /\ \/ / [email protected]
-=====/_/_//_/\_,_/ /_/\_\
_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev