【发布时间】:2011-09-16 12:52:05
【问题描述】:
我有几个长时间运行的 boost 线程,我希望能够通过中断它们来关闭它们。我能找到的所有文档都说你可以捕获thread_interrupted 异常,但并没有真正说明如果你不这样做会发生什么。
我会假设它会杀死线程(并希望线程得到正确清理)。但是,异常会随着线程而消失吗?还是它会被传递到主线程并杀死它?
【问题讨论】:
标签: c++ multithreading boost boost-thread
我有几个长时间运行的 boost 线程,我希望能够通过中断它们来关闭它们。我能找到的所有文档都说你可以捕获thread_interrupted 异常,但并没有真正说明如果你不这样做会发生什么。
我会假设它会杀死线程(并希望线程得到正确清理)。但是,异常会随着线程而消失吗?还是它会被传递到主线程并杀死它?
【问题讨论】:
标签: c++ multithreading boost boost-thread
该异常与任何其他 C++ 异常一样。如果您选择不捕获它,它将导致与任何其他未处理异常相同的效果。
如果不被捕获,它不会传播到主线程,但可能会导致其他不良行为。例如,在 Visual C++ 上,默认情况下这将是 terminate your process。
通常,防御性编程实践要求您捕获代码可能抛出的任何异常 - 就像您从调用的 OS API 检查错误一样。
编写大量 Boost.Thread 代码的人有一个关于中断here 的背景资料。
【讨论】: