当前位置: 首页 > news >正文

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

                       }
                      );

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/36889.html

相关文章:

  • 显式指定 ChromeDriver 路径
  • 归并排序:分而治之的排序之道
  • 关于JavaWeb中的组件-------Servlet
  • 企业业务安全进阶之路:AI技术与数据分析的应用
  • 解析Excel表表头
  • 淘宝/天猫获得淘宝商品快递费用 API 返回值说明
  • 2.25作业
  • 滑动验证组件-微信小程序
  • level2Day5
  • Postgresql-重置统计信息(reset statistics)
  • 二分查找理解
  • 数据挖掘中特征发现与特征提取的数学原理
  • 30 分钟从零开始入门 CSS
  • 【考研】复试相关上机题目
  • 【心得】缓存穿透与缓存击穿总是记混,一文从英语单词含义角度分析带你区分清楚!
  • github 推送的常见问题以及解决
  • 【TVM教程】为 NVIDIA GPU 自动调度神经网络
  • python-leetcode-柱状图中最大的矩形
  • ai大模型自动化测试-TensorFlow Testing 测试模型实例
  • 银行应用系统全生命周期管理制度设计
  • Java进阶学习笔记18——接口的注意事项
  • 深入解析Java线程优先级的奥秘
  • VUE 获取视频时长,无需修改数据库,前提当前查看视频可以得到时长
  • 三、多项式环
  • 深度学习奠基作 AlexNet 论文阅读笔记(2025.2.25)
  • HPE Aruba Networking推出全新解决方案助力零售商增强物联网数据收集与边缘处理能力
  • 清华大学出品DeepSeek 四部教程全收录(附下载包),清华deepseek文档下载地址
  • leetcode 136. 只出现一次的数字
  • STM32开发方式
  • 本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)