QT C++ QtConcurrent::run 异步任务 简单例子

QtConcurrent命名空间提供了高级API,使得无需使用低级线程原语即可编写多线程程序。

‌**QtConcurrent::run** ‌是Qt框架中用于简化并发编程的一个功能,主要用于在后台线程中异步执行函数或成员函数。其主要用途包括:

  1. 异步执行函数 ‌:QtConcurrent::run可以在一个单独的线程中运行一个函数,避免耗时操作阻塞当前线程。这对于提升应用程序的响应性和性能非常有帮助‌。
  2. 简化多线程编程 ‌:通过使用QtConcurrent::run,开发者可以避免直接处理线程的创建、管理和数据同步等复杂操作。这使得编写多线程代码变得更加简单和直观‌。
  3. 利用多核处理器能力 ‌:QtConcurrent模块能够根据计算机的CPU核心数自动调整运行的线程数目,从而充分利用多核处理器的计算能力‌。

使用方法

使用QtConcurrent::run的基本步骤如下:

  1. 包含必要的头文件 ‌:在代码中包含#include <QtConcurrent>
  2. 调用QtConcurrent::run ‌:使用QtConcurrent::run函数,可以传递一个函数或成员函数及其参数。该函数将在后台线程中异步执行。
  3. 获取结果 ‌:可以通过QFuture对象获取异步操作的结果。如果需要等待操作完成,可以使用QFutureWatcher来监控和同步结果‌。

以下是例子,在界面上拖放了一个按钮btn1,在按钮Click程序中试验。

1.头文件

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

#include <QtConcurrent>

QT_BEGIN_NAMESPACE

namespace Ui {

class Widget;

}

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

private slots:

void on_btn1_clicked();

private:

Ui::Widget *ui;

};

#endif // WIDGET_H

2.cpp文件

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_btn1_clicked()

{

// QThread::msleep(5000);//这行会卡死界面,不能拖动

//下面的程序不会卡死界面,放入了lambda函数

QtConcurrent::run(

()//以下三行是lambda函数,可以用其它函数替代
{
QThread::msleep(5000);
}
);

//以上的 QtConcurrent::run程序和下面几行是等价的

QtConcurrent::run(QThreadPool::globalInstance(),

()

{

QThread::msleep(5000);

}

);

}

相关推荐
2501_909509106 分钟前
DAY 28
开发语言·python
user-猴子12 分钟前
从零构建 2048 游戏,解析“Python-Use”范式的完整闭环
开发语言·python·游戏
咕白m62519 分钟前
通过 C++ 写入数据到 Excel 文档
c++·后端
qq_4017004130 分钟前
Qt容器性能优化:QVector、QHash、QMap到底应该怎么选?
开发语言·qt·性能优化
星栈独行34 分钟前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
这就是佬们吗42 分钟前
Python入门③-运算符、条件与循环
开发语言·数据库·vscode·python·pycharm·编辑器
小刘学技术1 小时前
AI人工智能中的类别不平衡问题:成因、影响与解决方案
开发语言·人工智能·python·机器学习
兰令水1 小时前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
qz5zwangzihan11 小时前
题解:Atcoder Beginner Contest abc467 F - Email Scheduling Optimization
c++·贪心·atcoder·平衡树·abc467·abc467_f·fhq-treap
2501_914245931 小时前
Java应用性能调优与生产监控部署:2026年实战手册
java·开发语言