c++ - 如何卸载高度依赖于正确异常处理的计算繁重的任务?

标签 c++ multithreading qt progress-bar qtconcurrent

在我的 Qt 应用程序中,我必须执行一些计算量大的任务,通常是从磁盘加载巨大的数据集(单线程)。任务中的代码严重依赖于正确的异常处理,并且严格来说是非 Qt 的。 我使用 QtConcurrent::run() 从 GUI 线程卸载这些任务,以便我可以显示进度条。然而,正如我从 Qt 文档中了解到的那样,我无法在 GUI 线程中捕获异常。我知道从理论上讲这是没有意义的。但是,在实践中,由于进度条,我只使用线程。处理这种情况的最佳方法是什么?

编辑:我想强调的是,我不需要对卸载的工作进行细粒度控制。我真的只卸载它来显示进度条。这可能是其他人也遇到过的情况。

最佳答案

您可以将整个函数包装到一个 try/catch 中。当捕获到异常时,您可以使用自定义信号通知 GUI 线程。

您也可以在 GUI 线程中运行您的函数并定期调用 QApplication::processEvents() 来更新 UI(进度条等)。

关于c++ - 如何卸载高度依赖于正确异常处理的计算繁重的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330878/

相关文章:

c++ - Qt 的 WCF 服务?

c++ - set.upper_bound()和upper_bound(set.begin(),set.end())STL之间的区别

c++ - 如何使笔记本的标签文本方向垂直(在 gtkmm 中)

c++ - 如何为 sql 查询准备 C++ 字符串

C++ STL 广度优先搜索

ios - 创建一个等待输入的线程。

linux - 2个并行连接中socket write()的公平性?

c++ - 在 const 方法中将 'mutable' 用于异步填充缓存

java 线程转储显示死锁症状

c++ - Qt 模型- View - Controller