
Hi Simon, Even though you've already left for the holidays, just for the record... --- simon meiklejohn <simon@simonmeiklejohn.com> wrote: <snip>
A naive approach (i.e. all that comes to mind for me) would be to add a virtual method to demuxer. Where currently demuxer is calling the Handler directly, instead pass it to the virtual function 'deliver_handler( Handler& handler )'.
Then someone who wants gui delivery can create a class derived from asio::demuxer typedef, override deliver_handler manage their own internal queue of Handlers and create a cross-thread notification mechanism appropriate to the platform
The virtual function would impose a cost on all platforms so perhaps a special purpose demuxer base class could be created (special policy perhaps) intended for derivation. e.g. asio::forwarding_demuxer
I'll investigate using something similar to my proposed custom allocation hook for this. E.g.: template <typename Handler> class handler_dispatch_hook { public: template <typename Demuxer, typename Function_Object> static void dispatch(Demuxer& d, Handler& h, Function_Object& f) { f(); } }; Or something like that anyway. Hope you enjoy your break. Cheers, Chris