[Qt5] 使用QtConcurrent::run在异步线程中执行耗时函数

  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:

      • 一. QtConcurrent::run异步线程操作


一. QtConcurrent::run异步线程操作

在Qt中,使用QtConcurrent::run来在异步线程中执行耗时操作,并将结果发送回主线程进行后续处理,是一种非常高效且简洁的方式。

以下是一个基于这种设计的C++流程示例:

1、 定义耗时函数

首先,你需要一个耗时函数,这个函数将在后台线程中被执行。

#include <QDebug>  
#include <QThread>  // 假设的耗时函数  
int longRunningTask(int input) {  // 模拟耗时操作  QThread::sleep(5); // 假设这个函数需要5秒钟来完成  qDebug() << "Task completed in thread" << QThread::currentThreadId();  return input * 2; // 假设的处理结果  
}

2、 使用QtConcurrent::run执行耗时函数

在你的主线程(通常是GUI线程)中,使用QtConcurrent::run来异步执行这个耗时函数。

#include <QtConcurrent>  
#include <QFutureWatcher>  // ... 在某个函数或方法中 ...  // 调用耗时函数  
int input = 10;  
QFuture<int> future = QtConcurrent::run(longRunningTask, input);  // 创建一个QFutureWatcher来监视future的状态  
QFutureWatcher<int> *watcher = new QFutureWatcher<int>();  
QObject::connect(watcher, &QFutureWatcher<int>::finished, [=]() {  // 当任务完成时,这里会被调用  if (watcher->result() != -1) { // 假设-1是某种错误码  int result = watcher->result();  qDebug() << "Result received in main thread:" << result;  // 在这里进行后续操作,使用result  }  watcher->deleteLater(); // watcher对象在任务完成后不再需要,使用deleteLater()来确保它会被适当地清理掉  
});  watcher->setFuture(future); // 将future与watcher关联起来,让watcher开始监视future的状态

代码结尾的watcher->setFuture(future);是将QFutureWatcher对象watcherQFuture对象future关联起来。QFutureWatcher是一个模板类,用于监视QFuture对象的状态变化。当你调用QtConcurrent::run()时,它会返回一个QFuture对象,该对象代表了异步操作的结果。通过调用setFuture()方法,你可以让QFutureWatcher开始监视这个QFuture对象。


下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-树形图工具类TreeUtil

TreeUtil 工具类,包括列表转树形结构、遍历、查找和删除节点等功能。 import java.util.*;public class TreeUtil {/*** 将列表转换为树形结构。** @param target 扁平化的节点列表* @param getId 获取节点ID的函数* @param getParentId 获取节点父ID的函数* @…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》&#xff0c;作者是 Mohamad Taib Miskon 等人&#xff0c;发表在 2024 年 IEEE 自动控制与智能系统国际会议&#xff08;I2CACIS&#xff09;上。以下是该论文的主要…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练&#xff0c;这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如&#xff0c;要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

学习日志29

论文阅读&#xff1a;IBM Q Experience as a versatile experimental testbed for simulating open quantum systems 引言部分&#xff1a; 引言部分首先介绍了开放量子系统的理论研究的重要性&#xff0c;这些理论描述了量子系统与其环境相互作用的动力学。这种理论对于理解量…

C++复习day01

这篇博客主要复习C语言的数组和指针 1.指针数组和数组指针 问&#xff1a;指针数组和数组指针&#xff0c;哪一个是指针&#xff0c;哪一个是数组&#xff1f; 我们来类比一下&#xff0c;整型数组是存放整型的数组&#xff0c;那么指针数组就是一个存放指针的数组&#xff0…

经验笔记:进程、线程与协程的理解与应用

经验笔记&#xff1a;进程、线程与协程的理解与应用 1. 引言 在软件开发中&#xff0c;特别是在涉及并发编程的场景下&#xff0c;进程、线程和协程是非常重要的概念。理解它们各自的定义、特点以及彼此之间的联系对于有效地设计和实现高效的应用程序至关重要。 2. 定义与特…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器&#xff08;random access iterator&#xff09; 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

【工业AI】寻优算法的思考

遗传算法GA 本质上来讲&#xff0c;就是找随机点x&#xff0c;通过公式或者回归模型构成的映射函数获得y。 区别于其他搜索寻优算法之处在于&#xff1a;遗传算法的一轮一轮迭代中&#xff0c;新的随机点x的生成&#xff0c;是靠交叉变异01而来的。 初始的DNA_size不管设置为多…

vue3+ts文件流导出xlsx表格需要token

封装方法post请求 import { ElLoading } from element-plus; import axios from axios; export const exportFilePost (params: any) > {const loadingInstance ElLoading.service({background: rgba(255, 255, 255, 0),});axios.post(params.url, params.data, {headers…

redis内存数据库的专业术语雪崩、击穿、穿透的名词解释

redis作为一个内存数据库&#xff0c;其作用主要体现在可以提供高速的访问处理。 redis在内存层面工作&#xff0c;一个字&#xff0c;快。 这也是redis区别于其他类型数据库的一个主要特点。 与之配合使用的是后端持久化存储数据库&#xff0c;比如结构化的数据库mysql mysql的…

18、Gemini-Pentest-v2

难度 中 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.63 信息收集 web测试 访问80端口 上面介绍了一下这个系统是一个内部系统&#xff0c;让员工查看他们的个人资料还可以导出为PDF 页面还有一个链接是UserList可以访问但是页面什…

ES数据写入过程

1. 写入请求 当一个写入请求&#xff08;如 Index、Update 或 Delete 请求&#xff09;通过REST API发送到Elasticsearch时&#xff0c;通常包含一个文档的内容&#xff0c;以及该文档的索引和ID。 2. 请求路由 协调节点&#xff1a;首先&#xff0c;请求会到达一个协调节点…

微服务日常总结

1.当我们在开发中&#xff0c;需要连接多个库时&#xff0c;可以在yml中进行配置。 当在查询的时候&#xff0c;跨库时&#xff0c;需要通过DS 注解来指定&#xff0c;需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中&#xff0c;需要再字段 的占位符后面加上j…

Python 用pandas连接Postgresql库

pandas确实蛮强的&#xff0c;记录使用的代码 from sqlalchemy import create_engine import pandas as pd import os# 从环境变量中读取数据库连接信息 user os.getenv(DB_USER, xxx) # 数据库用户名 password os.getenv(DB_PASSWORD, xxx) # 数据库密码…

HarmonyOS(53) 获取设备标志符UUID和ODID

UUID和ODID UUID和ODID简介UUID生成规则ODID生成规则相关代码参考资料 UUID和ODID简介 在APP开发过程中&#xff0c;经常需要一些唯一标识符作为留痕使用&#xff0c;HaymonyOS也提供了UUID和ODID来满足类似的工作。 UUID:应用卸载重新安装时会重新生成UUIDODID&#xff1a;手…

Zookeeper 官方示例2-SyncPrimitive 代码解读(二)

测试命令 java jar .\ZookeeperDemo-0.0.1-SNAPSHOT.jar bTest 192.168.206.100:2181 2 1. Barrier&#xff08;阻塞原语&#xff09; 1.1 概念 [!quote] A barrier is a primitive that enables a group of processes to synchronize the beginning and the end of a comput…

Nginx负载均衡静态资源缓存配置指南

引言 Nginx 是一款高性能的 HTTP 服务器和反向代理&#xff0c;广泛用于提供负载均衡服务。在处理静态资源时&#xff0c;合理配置 Nginx 的缓存机制可以显著提高应用性能和响应速度。本文将详细介绍如何在 Nginx 负载均衡中配置静态资源的缓存。 静态资源缓存的重要性 静态…

【业务】4A

目录 账号管理&#xff08;Account Management&#xff09;认证管理&#xff08;Authentication Management&#xff09;授权管理&#xff08;Authorization Management&#xff09;审计管理&#xff08;Audit Management&#xff09; 账号管理&#xff08;Account Management&…

zsh 的补全系统

在 Zsh 中&#xff0c;自动提醒&#xff08;自动补全&#xff09;功能通常由 zsh 的补全系统&#xff08;zsh-completions&#xff09;和 zsh-autosuggestions 等插件提供。如果你的 Zsh 不再自动提醒了&#xff0c;可以通过以下步骤来检查和启用这些功能。 1. 确保补全系统已…

C/C++趣味编程

文章目录 热门文章每日十练1. 计算圆的面积2. 计算两个整数的最大公约数&#xff08;GCD&#xff09;3. 检查一个数是否为回文数4. 输出斐波那契数列5. 检查一个数是否为质数&#xff08;素数&#xff09;6. 将摄氏温度转换为华氏温度7. 使用递归计算阶乘8. 计算两个数的LCM&am…