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

时间:2010-05-10 09:00:04

标签: c++ multithreading boost

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

如果完成,我会开始一个新的 如果不这样做,我什么都不做。

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

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

由于

编辑:

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

这样做的意思是boost :: condition_variable

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

编辑:

对不起,jules,我误解了你的问题。我建议你看一下producer-consumer模式。查看此article有关如何使用boost条件变量滚动自己的阻塞队列的信息。英特尔的Thread Building Blocks也有一个阻塞队列实现。

查看此SO question有关现有无锁队列实现的信息。

希望这有帮助。

答案 2 :(得分:0)

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