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); } ); }

相关推荐
徐小黑ACG26 分钟前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
0白露2 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.2 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐3 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
Tttian6224 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
Merokes5 小时前
关于Gstreamer+MPP硬件加速推流问题:视频输入video0被占用
c++·音视频·rk3588
独好紫罗兰5 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
闪电麦坤956 小时前
C#:base 关键字
开发语言·c#
Mason Lin6 小时前
2025年3月29日(matlab -ss -lti)
开发语言·matlab
请来次降维打击!!!6 小时前
优选算法系列(5.位运算)
java·前端·c++·算法