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

相关推荐
SmartRadio6 小时前
CH585M+MK8000、DW1000 (UWB)+W25Q16的低功耗室内定位设计
c语言·开发语言·uwb
rfidunion6 小时前
QT5.7.0编译移植
开发语言·qt
rit84324996 小时前
MATLAB对组合巴克码抗干扰仿真的实现方案
开发语言·matlab
微露清风6 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习
大、男人6 小时前
python之asynccontextmanager学习
开发语言·python·学习
hqwest6 小时前
码上通QT实战08--导航按钮切换界面
开发语言·qt·slot·信号与槽·connect·signals·emit
CSARImage7 小时前
C++读取exe程序标准输出
c++
一只小bit7 小时前
Qt 常用控件详解:按钮类 / 显示类 / 输入类属性、信号与实战示例
前端·c++·qt·gui
AC赳赳老秦7 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
一条大祥脚7 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法