如何从" ACE_Reactor :: instance() - > run_reactor_event_loop();"永远阻止?

时间:2014-07-29 21:25:42

标签: c++ ace

我有一个启动并处理排队项目的应用程序。物品以定时框架速率处理。这是使用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 &current_time, const void *act) {
  <Process item>

  If (more items left)
    return 0;
  else
    return -1;
}

这会导致调用handle_timeout()方法,然后处理队列中的一个项目。当队列中有更多项时,回调返回0.当队列为空时,回调返回-1,停止反应器循环。

问题是,当方法返回-1时,run_reactor_event_loop();仍然阻塞。我希望应用程序完成返回状态代码并退出。我很难找到带有示例的好文档。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

返回值并不意味着反应堆结束运行。要让run_reactor_event_loop()返回,您必须在ACE_Reactor::instance ()->end_reactor_event_loop ()某处调用,例如参见ACE_wrappers/examples/APG/Reactor下的ACE示例