使用boost::thread::interrupt()时,是否需要*捕获thread_interrupted异常

When using boost::thread::interrupt(), do you *need* to catch the thread_interrupted exception?

本文关键字:thread 捕获 interrupted 异常 interrupt boost 使用 是否      更新时间:2023-10-16

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

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

如果未捕获,它将不会传播到主线程,但可能会导致其他不希望的行为。例如,在Visual C++上,默认情况下这将终止进程。

一般来说,防御性编程实践会要求您捕捉代码可能引发的任何异常,就像您从调用的操作系统API中检查错误一样。

这里有一个关于中断的背景,由写了很多Boost.Thread代码的人提供。