使用MS VC ++和Boost线程,我在主线程中有一个例程 - 实际上是一个Windows程序 - 多次调用。在每次调用中,例程都会创建一个新线程 - 我计划通过 new 将线程对象创建到持久空间中,并将结果附加到global -static-指针 - 。如果在下一次调用reoutine时,我需要终止前一个的条件,前一个线程仍在运行。
我读过:“正如文件的生命周期可能与表示文件的iostream对象的生命周期不同,执行线程的生命周期可能与代表线程的线程对象不同。特别是,在调用join()之后,即使线程对象继续存在直到其正常生命周期结束,执行线程也将不再存在。反过来也是可能的;如果线程对象被销毁而没有执行首先调用join(),执行的线程继续,直到其初始函数完成“。
在重新发明轮子之前,问题是:是否有一种标准方法来检测线程是否仍在运行?在这种情况下:终止它的规范方法是什么?
提前致谢。
答案 0 :(得分:1)
结束线程的规范方法是join
或interrupt
,具体取决于你的线程到底做了什么。
据我所知,没有单个函数可以返回线程是否仍在运行,但是您可以尝试使用0等待时间调用timed_join
:
返回:
如果* this引用了一个执行线程,并且该执行线程在调用超时之前完成,则返回false,false 否则。
答案 1 :(得分:0)