当使用boost :: thread :: interrupt()时,你需要*来捕获thread_interrupted异常吗?

时间:2011-06-16 16:14:44

标签: c++ multithreading boost boost-thread

我有几个长时间运行的提升线程,我希望能够通过中断它们来关闭它们。我能找到的所有文档都说你可以捕获thread_interrupted异常,但它并没有真正说明如果不这样做会发生什么。 我认为它会杀死线程(并希望线程得到正确清理)。但那个异常会因为线程而消失吗?或者它是否被传递到主线程并杀死它?

1 个答案:

答案 0 :(得分:11)

异常就像任何其他C ++异常一样。如果您选择不捕获它,它将产生与任何其他未处理的异常相同的效果。

如果未被捕获,它将不会传播到主线程,但可能会导致其他不良行为。在Visual C ++上,默认情况下这将是terminate your process

一般而言,防御性编程实践会指示您应该捕获代码可以抛出的任何异常 - 就像从您调用的OS API检查错误一样。

编写了很多Boost.Thread代码的人有一个关于中断here的背景资料。