在 QT UI 编程中使用 QtConcurrent 和 QFutureWatcher 执行并发任务

问题

在 QT 的 UI 编程中, 如果有一个函数消耗的时间特别长, 并且运行于主线程, 那么界面的响应会很不灵敏. 通常的作法是使用多线程编辑.

另外, 如果该函数执行时间很长, 为了通知任务的进度, 一般会使用进度条. 但有时候无法准确的使用进度条, 比如在数据库操作中, 为了提高读写数据库的性能, 通常会采用事务操作, 多个读写数据库的操作合并成了一个事务, 此时如何设置进度条的进度值?

此时, 可以使用 QtConcurrent 和 QFutureWatcher 来解决这个问题. 对于第一个问题不需多言. 对于第二个问题, 可以在任务开始后以QMessageBox::imformation 对话框来告知用户完成任务需要时间很长, 在任务执行完毕时关闭该对话框 (如果用户没有关闭的话).

QtConcurrent 和 QFutureWatcher

QtConcurrent 是一个名字空间, 其内包含了众多的高级 API, 方便用户编写多线程程序.

QFutureWatcher 可以用于监视线程的完成情况, 并获取线程的返回值.
QtConcurrent 线程函数与 QFutureWatcher 之间的中间者是 QFuture.

示例代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值