qt崩溃时boost线程中断

Posted

技术标签:

【中文标题】qt崩溃时boost线程中断【英文标题】:Boost thread interrupted when qt crashes 【发布时间】:2013-03-30 18:51:00 【问题描述】:

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

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

runtime 或 qt 是否会以某种方式终止 boost 线程并导致 thread_interrupted 异常?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于qt崩溃时boost线程中断的主要内容,如果未能解决你的问题,请参考以下文章

boost::thread编程-线程中断(转)

在 Windows 上使用 WaitForSingleObject 但支持提升线程中断

Boost::asio - 如何中断阻塞的 tcp 服务器线程?

如果未加入则中断线程

如何从另一个线程中断 websocket(使用 boost beast)?

在 boost 线程上调用抽象函数,不会在 interrupt_point 中断