我有一个启动并处理排队项目的应用程序。物品以定时框架速率处理。这是使用ACE_Reactor类实现的。
解决这个问题的代码是:
void start() {
ACE_Reactor::instance()->schedule_timer( this, NULL, ACE_Time_Value(0,1000), ACE_Time_Value(0,1000) );
ACE_Reactor::instance()->run_reactor_event_loop();
}
handle_timeout (const ACE_Time_Value ¤t_time, const void *act) {
<Process item>
If (more items left)
return 0;
else
return -1;
}
这会导致调用handle_timeout()方法,然后处理队列中的一个项目。当队列中有更多项时,回调返回0.当队列为空时,回调返回-1,停止反应器循环。
问题是,当方法返回-1时,run_reactor_event_loop();
仍然阻塞。我希望应用程序完成返回状态代码并退出。我很难找到带有示例的好文档。
我错过了什么吗?
答案 0 :(得分:1)
返回值并不意味着反应堆结束运行。要让run_reactor_event_loop()
返回,您必须在ACE_Reactor::instance ()->end_reactor_event_loop ()
某处调用,例如参见ACE_wrappers/examples/APG/Reactor下的ACE示例