如何检测线程是否处于活动状态

时间:2011-12-23 18:20:46

标签: windows visual-c++ boost-thread

使用MS VC ++和Boost线程,我在主线程中有一个例程 - 实际上是一个Windows程序 - 多次调用。在每次调用中,例程都会创建一个新线程 - 我计划通过 new 将线程对象创建到持久空间中,并将结果附加到global -static-指针 - 。如果在下一次调用reoutine时,我需要终止前一个的条件,前一个线程仍在运行。

我读过:“正如文件的生命周期可能与表示文件的iostream对象的生命周期不同,执行线程的生命周期可能与代表线程的线程对象不同。特别是,在调用join()之后,即使线程对象继续存在直到其正常生命周期结束,执行线程也将不再存在。反过来也是可能的;如果线程对象被销毁而没有执行首先调用join(),执行的线程继续,直到其初始函数完成“。

在重新发明轮子之前,问题是:是否有一种标准方法来检测线程是否仍在运行?在这种情况下:终止它的规范方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

结束线程的规范方法是joininterrupt,具体取决于你的线程到底做了什么。 据我所知,没有单个函数可以返回线程是否仍在运行,但是您可以尝试使用0等待时间调用timed_join

  

返回:

     

如果* this引用了一个执行线程,并且该执行线程在调用超时之前完成,则返回false,false   否则。

答案 1 :(得分:0)

使用joinable方法怎么样?

  

如果* this引用执行线程,则返回true,否则返回false。

有两种终止线程的方法:join更简洁,或者你可以调用detach