使用boost::thread::interrupt()时,是否需要*捕获thread_interrupted异常
When using boost::thread::interrupt(), do you *need* to catch the thread_interrupted exception?
我有几个长时间运行的boost线程,我希望能够通过中断它们来关闭它们。我能找到的所有文档都表明,可以捕获thread_interrupted
异常,但它并没有真正说明如果不捕获会发生什么。我认为它会杀死线程(希望线程能得到正确的清理)。但是,异常会随着线程而消失吗?还是它被传递到主线程并杀死了它?
异常与其他C++异常一样。如果您选择不捕获它,它将导致与任何其他未处理的异常相同的效果。
如果未捕获,它将不会传播到主线程,但可能会导致其他不希望的行为。例如,在Visual C++上,默认情况下这将终止进程。
一般来说,防御性编程实践会要求您捕捉代码可能引发的任何异常,就像您从调用的操作系统API中检查错误一样。
这里有一个关于中断的背景,由写了很多Boost.Thread代码的人提供。
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 当类定义不可见时捕获异常
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 在std::thread中,joinable()然后join()线程安全吗
- 在 lambda 捕获中声明的变量的类型推导
- RtlCaptureStackBackTrace未捕获任何帧
- 如何在Qt中取消捕获字符串
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 如何将strftime中的格式错误作为异常捕获
- 在Linux下捕获SIGKILL的C++程序
- 按值捕获引用时出现非常量
- 捕获lambda中的std::数组
- 由cin中的字符串中未捕获空白引起的分割错误
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 分离一个静态常量 std::thread?
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如果在生成 std::thread 后引发,则未捕获异常
- 使用boost::thread::interrupt()时,是否需要*捕获thread_interrupted异常