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

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.xdnf.cn/news/16835.html

相关文章:

  • Nginx反向代理负载均衡
  • 常用设计模式系列(十六)—策略模式
  • Ubuntu 24.04 LTS 保姆级教程:安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包
  • 【YOLOv1】
  • 云服务器数据库
  • 【龙泽科技】汽车维护与底盘拆装检修仿真教学软件【风光580】
  • 机器学习①【机器学习的定义以及核心思想、数据集:机器学习的“燃料”(组成和获取)】
  • [Broken IOS] 配置CLI | 终端用户界面TUI
  • sqli-labs:Less-12关卡详细解析
  • C++异常处理的成本:理解与优化
  • Golang 调试技巧:在 Goland 中查看 Beego 控制器接收的前端字段参数
  • 文法中的间接左递归
  • Java【代码 21】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
  • 量子测量的物理场景与理论
  • sqoop从pg导出数据到hadoop上
  • 【数据结构初阶】--二叉树选择题专辑
  • 【人工智能-15】OpenCV直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换
  • 【PHP类的基础概念:从零开始学面向对象】
  • ES11 / ES2020 动态 import()(异步加载模块)
  • Java项目:基于SSM框架实现的小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • 使用神经网络与5折交叉验证进行基因组预测:基础知识指南
  • 【JMeter】性能测试脚本录制及完善
  • 从一开始的网络攻防(十三):WAF入门到上手
  • day 40 打卡-装饰器
  • 【JEECG】JVxeTable表格拖拽排序功能
  • [SKE]Python gmssl库的C绑定
  • 机器视觉halcon7-缺陷检测
  • 计算机网络1-3:三种交换方式
  • 开源 Arkts 鸿蒙应用 开发(十二)传感器的使用
  • 双线串行的 “跨界对话”:I2C 与 MDIO 的异同解析