这是一个关于通用C++事件驱动的应用程序设计的问题。假设我们有两个线程,一个是“Dispatcher”(或“Engine”...)和一个“Listener”(或“Client”...)。
我们假设我编写了Dispatcher代码,并将其作为库释放。当然,我也编写了Listener接口。
当调度执行(监听器注册后)避免卡住调用回调
listenerInstance.onSomeEvent();
事件处理代码会实际上是由发送器线程执行,因此,如果实现监听的人喜欢
void Listener::onSomeEvent() { while(true) ; }
调度程序将永久停留。
是否有一个“简单的老C++”(我的意思是没有提升或libsigC++)的方式来“解耦”这两个类,所以我可以确定我的Dispatcher可以正常工作,无论Listener在回调中做什么?
再见和感谢提前,
安德烈
您的意见后,我评估了两个解决方案:1)生成一个线程,其目的只是调用回调和2)使用boost或libsigC++。我最后的决定(因为目标平台是一个嵌入式系统)是为了保持一切简单,所以我不会实现这些解决方案:我只是把一个大写的“免责声明”,比如“这个回调的实现必须简单速度快,否则库不能工作,我们建议设置一个应该在客户端主循环中管理的标志“。 – andlomba 2010-03-12 10:23:48