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

}

);

}

相关推荐
Chandler243 分钟前
C++11 智能指针:unique_ptr、shared_ptr和weak_ptr 功能特性 模拟实现
开发语言·c++
十八朵郁金香10 分钟前
深入理解 JavaScript 中的 this 指向
开发语言·前端·javascript
一只自律的鸡14 分钟前
C进阶 自定义类型
c语言·开发语言
让学习成为一种生活方式17 分钟前
libGL.so.1: cannot open shared object file: No such file or directory-linux022
linux·开发语言·python
贵州晓智信息科技23 分钟前
使用 Three.js 转换 GLSL 粒子效果着色器
开发语言·javascript·着色器
一只蜗牛儿1 小时前
C# 版 OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)
开发语言·opencv·c#
辰阳星宇1 小时前
203、【数组】NLP分词实现(Python)
开发语言·python
-拟墨画扇-1 小时前
C++ | 面向对象 | 继承
c++·向上转型·虚继承
Y_3_72 小时前
30 分钟从零开始入门 CSS
开发语言·前端·css·人工智能·python·tensorflow
tianmu_sama2 小时前
[Linux高性能服务器编程] 多线程编程
linux·服务器·c++·算法