繁体   English   中英

我如何知道是否完成了增强螺纹?

[英]How do I know if a boost thread is done?

我使用boost :: thread来处理队列中的消息。 当第一条消息出现时,我启动了一个消息处理线程。 当第二条消息出现时,我检查消息处理线程是否完成。

如果它完成了我开始一个新的如果它没有完成我什么都不做。

我怎么知道线程是否完成? 我尝试使用joinable()但它不起作用,因为当线程完成时,它仍然可以连接。

我也试图立即中断进程,并在我的线程末尾添加一个中断点,但它没有用。

谢谢

编辑:

我想让我的线程在不确定的时间内休眠,并在触发信号时唤醒。

这样做的意思是boost :: condition_variable

据我所知,你应该使用join()方法等待线程执行的结束。 你可以使用timed_join()超时使用它。

您可以使用interrupt()中断线程。 在这种情况下,如果执行到达中断点(boost :: this_thread :: sleep()或boost :: this_thread :: interruption_point()),则在线程内部将发生异常。 您在线程内捕获异常,然后可以关闭它。

为每个传入消息生成一个新线程是非常低效的。 你应该看看线程池模式

编辑:

对不起,jules,我误解了你的问题。 我建议你看一下生产者 - 消费者模式。 查看本文 ,了解如何使用boost条件变量滚动自己的阻塞队列。 英特尔的线程构建模块也有阻塞队列实现。

查看有关现有无锁队列实现的SO 问题

希望这可以帮助。

您是否尝试使用boost :: this_thread :: get_id()检查get_id()。 如果匹配则线程不存在。 但只有退出线程才会发生这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM