我有一个类似于This one的问题。 但我想在Linux中使用ACE框架来实现这一点。什么是做到这一点在ACE中优雅地终止线程
回答
多一点信息将有助于获得更好的回答方式:
- 是你的工作线程在运行之前等待其他事件?
- 你的线程如何相互沟通?
- 您是否总是能够优雅地终止,或者您是否期望不得不强制终止某些线程?
的other question你提到了一个非常好的点:
通常情况下,一个线程终止的方法是简单地从定义线程函数返回。通常,主线程使用事件对象或简单的整数或布尔值指示工作线程退出。如果工作线程在WaitForSingleObject中等待,则可能需要将其更改为WaitForMultipleObjects,其中一个对象是事件。主线程会调用SetEvent,并且工作线程会唤醒并返回。
根据您在ACE中设置的内容,您可以使用从主线程到工作线程的进程间通信,告诉它们停止,它们将在下一次事件检查时拾取和处理。或者,您可以使用linux的select
。
希望这点能指引您朝着正确的方向发展。
我目前处于设计阶段。我的子线程一旦开始执行,他们需要定期运行以执行一些工作,还需要等待父线程的触发器(窗口中的事件)。这些事件包括终止。无论如何,这是在Windows中。我发现很难找到ACE中的类似接口 2.只有父线程需要与子线程通信 3.是的,我们总是有能力正常终止 您提到的另一个问题是我需要用ACE来实现。你可以在ACE – Poorna 2010-05-11 02:56:07
中建议我使用类似的接口吗?免责声明:我自己没有使用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
@resehen我感觉到的是套接字,选择和消息队列基本上用于需要某些IO或数据传输的情况。 和ACE或linux条件变量有些奇怪,因为我需要为每个相应的事件创建一个条件变量,并且多个线程使用相同的条件变量进行互斥锁定是低效的。可能是我应该使用ACE线程管理器ACE_Thread_Manager :: instance() - > cancel_all()来终止每个线程中的所有线程和ACE事件处理程序,以便它们可以定期运行。 – Poorna 2010-05-12 04:09:25
- 1. 优雅地终止Python线程
- 2. 优雅地停止一个std ::线程?
- 3. 优雅地退出线程在Ruby中
- 4. 在Windows上优雅地终止命令行应用程序
- 5. 优雅地中断java线程
- 6. Java程序的优雅终止和终止信号的记录
- 7. 优雅地(即最终合作)暂停线程执行
- 8. 在PowerShell脚本中优雅地停止
- 9. 如何优雅地停止java进程?
- 10. 优雅地停止NSXMLParser?
- 11. 优雅地关闭工作线程
- 12. 用pthreads优雅地退出主线程
- 13. 如何优雅地停止长执行线程?
- 14. ec2现货实例优雅终止
- 15. 使用信号优雅地终止Autobahn ApplicationRunner()。run().SIGINT
- 16. 在终止自动缩放EC2实例时优雅地停止Sidekiq
- 17. 如何在有线程等待时优雅地降级程序?
- 18. 终止线程
- 19. 在windows服务上优雅地关闭前台线程
- 20. 如何从主线程中优雅地阻塞pthread退出?
- 21. 如何最好地终止python线程?
- 22. 优雅的吊舱终结
- 23. 线程终止在C#
- 24. 优雅地关闭多线程应用程序?
- 25. 优雅地关闭了多线程无限循环的程序
- 26. SlimDX - 终止线程
- 27. Java - 终止线程
- 28. Java终止或终止线程
- 29. 在Python中的线程中终止sockert.recv
- 30. 停止.NET线程的最不优雅的方式是什么?
我假设你的意思是http://en.wikipedia.org/wiki/Adaptive_Communication_Environment – skaffman 2010-05-10 20:43:02
@skaffman是的.. – Poorna 2010-05-11 16:00:12