我有几个长时间运行的提升线程,我希望能够通过中断它们来关闭它们。我能找到的所有文档都说你可以捕获thread_interrupted
异常,但它并没有真正说明如果不这样做会发生什么。
我认为它会杀死线程(并希望线程得到正确清理)。但那个异常会因为线程而消失吗?或者它是否被传递到主线程并杀死它?
答案 0 :(得分:11)
异常就像任何其他C ++异常一样。如果您选择不捕获它,它将产生与任何其他未处理的异常相同的效果。
如果未被捕获,它将不会传播到主线程,但可能会导致其他不良行为。在Visual C ++上,默认情况下这将是terminate your process。
一般而言,防御性编程实践会指示您应该捕获代码可以抛出的任何异常 - 就像从您调用的OS API检查错误一样。
编写了很多Boost.Thread代码的人有一个关于中断here的背景资料。