我有一个运行几个boost线程的qt应用程序。当我在我的一个qt事件处理程序中得到一个未处理的异常(例如std :: runtime_error)时,boost线程也会捕获thread_interrupted异常。
为什么会这样?我已经尝试了所有中断点周围的catch块,比如boost sleep,所以我无法弄清楚thread_interrupted异常来自哪里(即使所有被记录为中断点的调用都已经在线程函数中捕获了异常)包裹在try-catch块中。)
运行时或qt是否会以某种方式终止boost线程并导致thread_interrupted异常?
理想情况下,我希望qt中的任何未处理的异常都出现在主线程中,而不是在boost线程中。
答案 0 :(得分:0)
解决。我在障碍物上发现了无保护的等待。 当Qt插槽中发生异常时,Qt开始清理并调用应用程序析构函数。这反过来导致我的线程被中断,那些等待障碍的线程然后抛出异常。