Using EV_CUSTOM for custom events

Marc Lehmann schmorp at
Sat Apr 28 14:08:21 CEST 2012

On Fri, Apr 27, 2012 at 10:54:58PM +0400, Konstantin Osipov <kostja at> 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

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_    
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp at
      -=====/_/_//_/\_,_/ /_/\_\

More information about the libev mailing list