0

我有一个运行着几个 boost 线程的 qt 应用程序。当我在我的一个 qt 事件处理程序中遇到未处理的异常(例如 std::runtime_error)时,boost 线程也会捕获 thread_interrupted 异常。

为什么会这样?我已经尝试在所有中断点周围捕获块,例如增强睡眠,所以我无法弄清楚 thread_interrupted 异常来自哪里(即使所有记录为中断点的调用都已经在线程函数中捕获了异常包裹在 try-catch 块中)。

运行时或 qt 是否以某种方式终止了 boost 线程并导致 thread_interrupted 异常?

理想情况下,我希望 qt 中任何未处理的异常都出现在主线程中,而不是在 boost 线程中。

4

1 回答 1

0

解决了。我在障碍物上发现了一个不受保护的等待。当 Qt 插槽中发生异常时,Qt 开始清理并调用应用程序析构函数。这反过来又导致我的线程被中断,那些等待屏障的线程然后抛出异常。

于 2013-04-04T09:33:15.540 回答