C++ 在ACE中优雅地终止线程

C++ 在ACE中优雅地终止线程,c++,linux,ace,C++,Linux,Ace,我有一个类似的问题。 但我想在Linux中使用ACE框架实现这一点。怎么做呢多了解一些信息有助于获得更好的答案: 您的工作线程是否在运行之前等待其他事件 您的线程如何相互通信 您是否总是能够优雅地终止,或者您是否预期必须强制终止某些线程 你提到的这一点很好: 通常,线程终止的方式只是从定义线程的函数返回。通常,主线程使用事件对象或简单的整数或布尔值向工作线程发出退出信号。如果工作线程正在WaitForSingleObject中等待,则可能需要将其更改为WaitForMultipleObjec

我有一个类似的问题。
但我想在Linux中使用ACE框架实现这一点。怎么做呢

多了解一些信息有助于获得更好的答案:

  • 您的工作线程是否在运行之前等待其他事件
  • 您的线程如何相互通信
  • 您是否总是能够优雅地终止,或者您是否预期必须强制终止某些线程
你提到的这一点很好:

通常,线程终止的方式只是从定义线程的函数返回。通常,主线程使用事件对象或简单的整数或布尔值向工作线程发出退出信号。如果工作线程正在WaitForSingleObject中等待,则可能需要将其更改为WaitForMultipleObjects,其中一个对象是事件。主线程将调用SetEvent,工作线程将唤醒并返回

根据您在ACE中的设置,您可以使用从主线程到工作线程的进程间通信来通知它们停止,它们将在下一次事件检查时拾取并处理该消息。或者,您可以使用linux的


希望这能为您指明正确的方向。

我想您的意思是我目前正处于设计阶段。我的子线程一旦开始执行,它们需要定期运行以执行某些工作,还需要等待父线程的触发器(windows中的事件)。此事件包括终止。无论如何,这是在windows中。我发现在ACE 2中识别类似接口很困难。只有父线程需要与子线程3通信。是的,我们始终能够优雅地终止您提到的另一个问题正是我需要使用ACE实现的问题。你能给我推荐ACE中类似的界面吗免责声明:我自己没用过ACE,我更喜欢Boost。如果我正确理解你的问题,那不一定是ACE问题。在Linux中,您需要类似于Windows事件的东西,例如使用套接字和select(请参阅)。ACE的任务类(参见第5.5节)还提供了一个可用于替换事件的消息队列。另一种选择是使用ACE条件。底线是:有多种解决方案都使用ACE和本机linux调用。看看哪一个最适合您的需要。@reshen我觉得sockets、select和message队列基本上用于需要某些IO或数据传输的情况。ACE或linux条件变量有些奇怪,因为我需要为每个对应的事件设置一个条件变量,而多个线程使用相同的条件变量和互斥锁是低效的。可能我应该使用ACE线程管理器ACE_线程管理器::实例()->cancel_all()终止每个线程中的所有线程和ACE事件处理程序,以便它们可以定期运行。我查看了ACE_线程管理器文档,cancel_all()似乎正是您要查找的(cancel()如果需要按特定顺序杀死工人,还将提供更细粒度的控制)。我也同意你的结论,即插座对于你所需要的东西来说是沉重的,而大量的条件变量是低效的。听起来你走的路是对的。