2010-05-01 111 views
1

我有一个类似于This one的问题。 但我想在Linux中使用ACE框架来实现这一点。什么是做到这一点在ACE中优雅地终止线程

+0

我假设你的意思是http://en.wikipedia.org/wiki/Adaptive_Communication_Environment – skaffman 2010-05-10 20:43:02

+0

@skaffman是的.. – Poorna 2010-05-11 16:00:12

回答

3

多一点信息将有助于获得更好的回答方式:

  • 是你的工作线程在运行之前等待其他事件?
  • 你的线程如何相互沟通?
  • 您是否总是能够优雅地终止,或者您是否期望不得不强制终止某些线程?

other question你提到了一个非常好的点:

通常情况下,一个线程终止的方法是简单地从定义线程函数返回。通常,主线程使用事件对象或简单的整数或布尔值指示工作线程退出。如果工作线程在WaitForSingleObject中等待,则可能需要将其更改为WaitForMultipleObjects,其中一个对象是事件。主线程会调用SetEvent,并且工作线程会唤醒并返回。

根据您在ACE中设置的内容,您可以使用从主线程到工作线程的进程间通信,告诉它们停止,它们将在下一次事件检查时拾取和处理。或者,您可以使用linux的select

希望这点能指引您朝着正确的方向发展。

+0

我目前处于设计阶段。我的子线程一旦开始执行,他们需要定期运行以执行一些工作,还需要等待父线程的触发器(窗口中的事件)。这些事件包括终止。无论如何,这是在Windows中。我发现很难找到ACE中的类似接口 2.只有父线程需要与子线程通信 3.是的,我们总是有能力正常终止 您提到的另一个问题是我需要用ACE来实现。你可以在ACE – Poorna 2010-05-11 02:56:07

+1

中建议我使用类似的接口吗?免责声明:我自己没有使用ACE,我更喜欢Boost。 如果我正确理解你的问题,它不一定是一个ACE问题。在Linux中,您需要类似于Windows事件的东西,例如使用套接字和选择(请参阅http://linux.die.net/man/2/select_tut)。 ACE的任务类别(请参阅第5.5节http://www.cs.wustl.edu/~schmidt/PDF/ACE-concurrency.pdf)提供了一个可用于替换事件的消息队列。另一种选择是使用ACE条件。底线是:有多种解决方案都使用ACE和本地Linux调用。查看哪一个最适合您的需求。 – reshen 2010-05-11 15:52:17

+0

@resehen我感觉到的是套接字,选择和消息队列基本上用于需要某些IO或数据传输的情况。 和ACE或linux条件变量有些奇怪,因为我需要为每个相应的事件创建一个条件变量,并且多个线程使用相同的条件变量进行互斥锁定是低效的。可能是我应该使用ACE线程管理器ACE_Thread_Manager :: instance() - > cancel_all()来终止每个线程中的所有线程和ACE事件处理程序,以便它们可以定期运行。 – Poorna 2010-05-12 04:09:25