Custom services using boost::asio
Hi I would like to migrate an application from using Glib::Source (glibmm event loop) to use io_service instead. The application is using glib::sources for two job: - Drive lots of network IO connection - Process internal event which are generated in side the application it self. The Io part is easy to fit into asio, but I'm having problems seeing what the best way is to implement the core application event processing. Using glib::source I could register an interface where two function is called: bool prepare (int &timeout); bool dispatch (sigc::slot_base *slot); Prepare could set a time out identifying how much time should elapse before dispatch is ready to process an event. When the time is passed, the glib main loop will call the dispatch function, where I then can process the internal events. How can this be implemented in boost::asio io_service? I have look at the section 7.5 in http://en.highscore.de/cpp/boost/asio.htmlbut he is using a thread and a blocking call. Using a thread is not a solution in my case. I would rather like either polling, or some kind of scheduling... I any body has some hints, examples, advices it would be most appreciated. -- Allan W. Nielsen
On Tue, 16 Aug 2011 16:03:49 +0200, Allan Nielsen wrote: Hi Allan,
[...]Using glib::source I could register an interface where two function is called:
bool prepare (int &timeout); bool dispatch (sigc::slot_base *slot);
Prepare could set a time out identifying how much time should elapse before dispatch is ready to process an event.
When the time is passed, the glib main loop will call the dispatch function, where I then can process the internal events.
How can this be implemented in boost::asio io_service?
I have look at the section 7.5 in http://en.highscore.de/cpp/boost/asio.htmlbut he is using a thread and a blocking call. Using a thread is not a solution in my case.
I would rather like either polling, or some kind of scheduling...
I any body has some hints, examples, advices it would be most appreciated.
a thread is really a last resort. The ideal case is to use the very same event loop in Boost.Asio. That's typically IOCP on Windows and select() on POSIX. If you know that you can plug into those system calls you can use the Windows- and POSIX-specific classes. It all depends on whether you can get a file descriptor or HANDLE from glib::source to use with Boost.Asio? Boris
participants (2)
-
Allan Nielsen
-
Boris Schaeling