I have something similar, therefore "how I did it".

All polling is done by libev in the main-loop, a single main loop.
If a connection is established and processing the data needs some time, I remove the watchers from the loop, and creates a task from the data to process and the function to process the data, and pushes this set to an glib thread pool.

The thread is allowed calls the function to process the data with the data as argument, once it is done, it creates its result set, the data and a function which will deal with the result-data, and pushes this set to an async queue. To signal libev there is something in the async queue, I use ev_async from the thread.

libev catches the ev_async, I remove all pending sets from the async queue, call the provided function with the data provided. The function provided can rearm the watchers for the loop, and continue in the main loop.

It's rather simple, but works as expected.


Markus

_______________________________________________
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to