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

QtConcurrent::run函数

 

QtConcurrent实际上是一个命名空间 

函数原型: 

template<typename T> QFuture<T> QtConcurrent::run(Function function, ...)

它还有一个重载函数:

template<typename T> QFuture<T> QtConcurrent::run(QThreadPool * pool,Function function, ...)

 这两个函数是模板函数,T可以是任何数据类型,模板类对象QFuture<T>存储function的返回值。

例如:

void hello(const QString &name);

QFuture<void> f1 = QtConcurrent::run(hello,"123");

函数hello没有返回值,对应就是QFuture<void>;

如果函数hello返回值是QString,对应就是QFuture<QString>;

(1)QtConcurrent::run(function, ...)
(2)QtConcurrent::run(QThreadPool::globalInstance(), function, ...);

上面的两种写法是等价的,也就是说,如果使用(1),意味着函数是在QThreadPool::globalInstance()这个线程池中找一个线程来执行function.

示例: 

#include <QtConcurrent/QtConcurrentRun>
#include <QDebug>void hello(const QString &name)
{//这里可以是耗时的操作或计算qDebug() << "Hello" << name << "from" << QThread::currentThread();
}int main(int argc, char *argv[])
{qDebug() << "Main Thread" << QThread::currentThread();// 在一个单独的线程中调用 hello()QFuture<void> f1 = QtConcurrent::run(hello, QString("Qter"));QFuture<void> f2 = QtConcurrent::run(hello, QString("Pythoner"));// 阻塞调用线程并等待计算完成,确保所有结果可用f1.waitForFinished();f2.waitForFinished();return 0;
}
Main Thread QThread(0x17488080)
Hello "Qter" from QThread(0x1748c940, name = "Thread (pooled)")
Hello "Pythoner" from QThread(0x1748c7a0, name = "Thread (pooled)")

可以看到,出现了三个线程 : 主线程,子线程1,子线程2。

子线程1和子线程2,都来自线程池Thread(pooled)。 

等待异步的计算完成。(包括被终止的计算)。也即:一直等待直到isFinished()返回true。  

http://www.dtcms.com/a/308674.html

相关文章:

  • React 项目环境如何安装使用?
  • es的histogram直方图聚合和terms分组聚合
  • pig Cloud中分布式锁的使用(setIfAbsent)
  • 扫描发票自动录入财务系统怎么做?
  • 定点数 与 浮点数
  • 软件项目中如何编写项目计划书?指南
  • ros2 tf2详解
  • 基于 C 语言视角:流程图中分支与循环结构的深度解析
  • 敏捷开发轻量级看板工具:提升效率的秘密武器
  • 【02】大恒相机SDK C#开发 —— 初始化相机,采集第一帧图像
  • 基于单片机智能油烟机设计/厨房排烟系统设计
  • mac fusion win11虚拟机 不能正确识别bitlocker USB
  • wordpress配置文章详情页自动生成目录点击定位
  • 计算机存储正数,负数
  • Flask Bootstrap 后台权限管理方案
  • 【工具变量】企业数字化转型:数字化无形资产占比测算(2007-2024年)
  • 【算法基础课-算法模板2】数据结构
  • kmp复习,需要多看多练
  • 类和对象(前章)
  • 藏语识别技术在媒资行业的应用案例剖析
  • SELinux 核心概念与访问控制机制解析
  • Windows 10 WSLUbuntu 22.04 安装并迁移到 F 盘
  • MyBatis入门---环境搭建
  • 基于SpringBoot和SpringAI框架实践
  • 案例开发 - 日程管理 - 第四期
  • 鸿蒙开发交叉类型
  • 《零基础入门AI:传统机器学习核心算法(决策树、随机森林与线性回归)》
  • pyspark使用
  • 使用SFTTrainer进行微调
  • sqli-labs靶场Less24