
I have a great interest is this kind of use, but in a threaded environment. I've developed my own event-driven infrastructure but it's not designed to be super general-purpose. However, I am interest in actively participating in discussions around your proposal wrt this kind of use.
Specifically, my needs for event-driven programming arise from designing machine simulators, which have slightly different requirements than a GUI system (tracking simulator time, for example). A policy-based design works well and is what I've designed for my own use.
Thanks for the comments. what is the threading requirement in your application? Channel is a light-weight core for general purpose pub/sub message passing and the most common use case is multiple threads publish/send messages/events and multiple threads subscribe/receive messages/events. Its internal data structures are protected by RW_Mutex which is defined as sub-type of SynchPolicy (borrowed from ACE). For multi-threaded application, Channel template is specialized with SynchPoly = MT_Policy. For special single threaded cases (such as some systems designed with eventlib and X-window/Xlib/Xt, only single main thread detects external events and dispatch events), Channel template can be specialized with SynchPolicy = NULL_Policy whose sub-types are "no-ops" removing synch overhead. Another important design aspect is its "namespace" concept (borrowed from plan9/inferno). Channel's namespace is all the message/event ids published / subscribed by its members. The namespace can be linear, hierachical, and associative based on routing algorithms (and all these are easily changed when specializing Channel template for a particular application by different template arguments). When 2 channels are connected thru "connectors", their namespaces are "merged" to facilitate transparent distributed message passing and event dispatching. This "merge" operation can be controlled by defining filters and translators. Sorry for all these murmruing, the project website: http://channel.sourceforge.net/ provides more details. I am studying existing boost libraries for system programming (Thread, Shmem, Asio and Serialization). Is there any libraries i missed?
Thanks Yigong