Using libev in a GUI

Tim McClarren tim at
Wed Jan 6 19:21:14 CET 2010

Marc Lehmann wrote:
> On Tue, Jan 05, 2010 at 04:27:33PM -0800, John Wright <johnw at> wrote:
>> I need to embed a very simple server in a Mac carbon bundle that will be loaded when a GUI starts up.  It can't hang the main thread as the GUI needs to start responding to user interaction.  So I can't start an ev_loop in the main thread.  Are there any examples of people starting the ev_loop in another thread in this sort of situation?  I am not an experienced C programmer and was just hoping to build a simple webserver that will serve up one file.
> There is nothing to worry about - starting it in another thread is working
> exactly the same as starting it in the main thread.
> The only thing you have to watch out for is that you can only
> start/modify/stop watchers from that thread, not from the main thread.
> You can use a pipe/socketpair or ev_async watchers to wake up your other
> thread and tell him (e.g. by using a queue) to add/stop etc. watchers, but
> that is indeed rather complicated.

Actually, I have code that starts and stops watchers on the event loop 
associated with thread A, from thread B.  I use ev_asyncs to poke thread 
A to let him know that watcher state was changed.  This seems to work. 
Is it not designed to work?  There would be no problem in moving the 
calls to change watcher state over to be inside the async callback, but 
then I'd have to either create one async callback per watcher or attach 
state to one of the passed in data structures.

More information about the libev mailing list