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

qt QRunnable 与 QThreadPool详解

1. 概述

QRunnable是所有runnable对象的基类,它表示一个任务或要执行的代码。开发者需要子类化QRunnable并重写其run()函数来实现具体的任务逻辑。而QThreadPool则是一个管理QThread集合的类,它帮助减少创建线程的成本,通过管理和循环使用单独的QThread对象来执行任务队列中的任务。每个Qt应用程序都有一个全局QThreadPool对象,可以通过调用globalInstance()来访问。

2. 重要方法
  • QRunnable类

    • run(): 这是一个纯虚函数,需要子类化QRunnable并实现这个函数来定义任务的具体行为。
    • setAutoDelete(bool autoDelete):设置任务执行完成后是否自动删除对象。
    • autoDelete()const:返回任务是否自动删除对象。

  • QThreadPool类

    • globalInstance(): 获取全局QThreadPool对象的静态方法。
    • start(QRunnable *runnable, int priority = 0): 启动一个新的任务。runnable参数是要执行的任务对象,priority参数用于设置任务的优先级。如果runnable的autoDelete属性为true,则QThreadPool会在任务执行完毕后自动删除runnable对象。
    • tryStart(QRunnable *runnable): 尝试立即启动一个任务。如果没有可用的线程,则此函数不执行任何操作并返回false。
    • waitForDone(int msecs = -1): 等待所有任务完成并从线程池中删除所有线程。msecs参数指定了最多等待的毫秒数,如果为-1(默认值),则忽略超时,直到最后一个线程退出。
    • activeThreadCount(): 返回当前正在工作的线程数量。
    • maxThreadCount(): 返回线程池允许的最大线程数量。
    • setMaxThreadCount(int maxThreads): 设置线程池允许的最大线程数量。
    • setExpiryTimeout(int expiryTimeout): 设置线程在未使用时到期的超时时间(毫秒)。默认值是30000毫秒(30秒)。
#include <QCoreApplication>
#include <QThreadPool>
#include <QRunnable>
#include <QDebug>
#include <QThread>// 定义一个QRunnable的子类
class MyTask : public QRunnable
{
public:void run() override{qDebug() << "MyTask is running in thread:" << QThread::currentThread();// 在这里执行具体的任务逻辑}
};int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 获取全局QThreadPool对象QThreadPool *threadPool = QThreadPool::globalInstance();// 创建一个MyTask对象并启动它MyTask *task = new MyTask();threadPool->start(task);// 等待所有任务完成(在这个简单示例中,我们只有一个任务)threadPool->waitForDone();return a.exec();
}

觉得有帮助的话,打赏一下呗。。

           

相关文章:

qt QRunnable 与 QThreadPool详解

1. 概述 QRunnable是所有runnable对象的基类&#xff0c;它表示一个任务或要执行的代码。开发者需要子类化QRunnable并重写其run()函数来实现具体的任务逻辑。而QThreadPool则是一个管理QThread集合的类&#xff0c;它帮助减少创建线程的成本&#xff0c;通过管理和循环使用单…...

博客摘录「 java三年工作经验面试题整理《精华》」2023年6月12日

JDK 和 JRE 有什么区别&#xff1f;JDK&#xff1a;java 开发工具包&#xff0c;提供了 java 的开发环境和运行环境。JRE&#xff1a;java 运行环境&#xff0c;为 java 的运行提供了所需环境。JDK 其实包含了 JRE&#xff0c;同时还包含了编译 java 源码的编译器 javac&#x…...

福禄克FLUKE5500A与fluke5520a校准仪的区别功能

FLUKE5500A是美国福禄克公司的一款高性能的多功能校准仪&#xff0c;能够对手持式和台式多用表、示波器、示波表、功率计、电子温度表、数据采集器、功率谐波分析仪、进程校准器等多种仪器进行校准。 FLUKE5500A多功能校准仪供给了GPIB&#xff08;IEEE-488&#xff09;、RS-2…...

量化交易系统开发-实时行情自动化交易-2.技术栈

2019年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 本篇谈谈系统主要可以选择的技术栈&a…...

【逆向爬虫实战】--全方位分析+某某学堂登录(DES加密)

&#x1f935;‍♂️ 个人主页&#xff1a;rain雨雨编程 &#x1f604;微信公众号&#xff1a;rain雨雨编程 ✍&#x1f3fb;作者简介&#xff1a;持续分享机器学习&#xff0c;爬虫&#xff0c;数据分析 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01; …...

第2关:装载问题 (最优队列法)

问题描述 任务描述 相关知识 编程要求 测试说明 问题描述 有一批共个集装箱要装上 2 艘载重量分别为 C1 和 C2 的轮船&#xff0c;其中集 装箱i的重量为 Wi &#xff0c;且 装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这 2 艘轮船。如果有&#xff0c;找出一种…...

萤石设备视频接入平台EasyCVR海康私有化视频平台监控硬盘和普通硬盘有何区别?

在现代安防监控领域&#xff0c;对于数据存储和视频处理的需求日益增长&#xff0c;特别是在需要长时间、高稳定性监控的环境中&#xff0c;选择合适的存储设备和监控系统显得尤为重要。本文将深入探讨监控硬盘与普通硬盘的区别&#xff0c;并详细介绍海康私有化视频平台EasyCV…...

【Webpack配置全解析】打造你的专属构建流程️(4)

webpack 提供的 CLI 支持很多参数&#xff0c;例如 --mode&#xff0c;但更多的时候&#xff0c;我们会使用更加灵活的配置文件来控制 webpack 的行为。默认情况下&#xff0c;webpack 会读取 webpack.config.js 文件作为配置文件&#xff0c;但也可以通过 CLI 参数 --config 来…...

【SpringMVC】基础入门(1)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;什么是Spring Web MVC 1&#xff1a;Servlet 2&#xff1a;总结 二&#xff1a;MVC …...

FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数

如下图的解码流程&#xff0c;AVPacket中的位置 FFmpeg源码中通过AVPacket存储压缩后的音视频数据。它通常由解复用器&#xff08;demuxers&#xff09;输出&#xff0c;然后作为输入传递给解码器。 或者从编码器作为输出接收&#xff0c;然后传递给多路复用器&#xff08;mux…...

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…...

#渗透测试#SRC漏洞挖掘#深入挖掘CSRF漏洞02

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

基于OpenCV的相机捕捉视频进行人脸检测--米尔NXP i.MX93开发板

本篇测评由优秀测评者“eefocus_3914144”提供。 本文将介绍基于米尔电子MYD-LMX93开发板&#xff08;米尔基于NXP i.MX93开发板&#xff09;的基于OpenCV的人脸检测方案测试。 OpenCV提供了一个非常简单的接口&#xff0c;用于相机捕捉一个视频(我用的电脑内置摄像头) 1、安…...

【Node-Red】使用文件或相机拍摄实现图像识别

使用相机拍照实现图像识别 首先需要下载节点 node-red-contrib-tfjs-coco-ssd&#xff0c;下载不上的朋友可以根据【Node-Red】最新版coco-ssd 1.0.6安装方法&#xff08;windows&#xff09;文章进行安装。 1、智能识别图片 使用本地文件的形式对图像进行识别 时间戳&…...

【Arcpy】提示需要深度学习框架代码

try:import torchimport arcgis相关库HAS_DEPS True except:HAS_DEPS Falsedef _raise_conda_import_error():arcpy.AddIDMessage("ERROR", 260005)exit(260005)if not HAS_DEPS:_raise_conda_import_error()...

【蓝桥杯 2021 省 B2】特殊年份

题目描述&#xff1a; 今年是 2021 年&#xff0c;2021 这个数字非常特殊, 它的千位和十位相等, 个位比百位大 1&#xff0c;我们称满足这样条件的年份为特殊年份。 输入 5 个年份&#xff0c;请计算这里面有多少个特殊年份。 输入格式 输入 5 行&#xff0c;每行一个 4 位十…...

【云原生开发】namespace管理的后端开发设计与实现

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

威联通Docker Compose搭建NAS媒体库资源工具NAS Tools

文章目录 一、环境配置1-1 需要的配件1-2 环境安装及配置注意:获取PUID/PGID1-3 目录位置准备总结,这里我们要做5件事备注:Docker无法下载解决办法二、登录配件,进行配件连接和配置2-1 jackett设置2-2 qBittorrent设置!!!设置文件下载地址2-3 jellyfin设置2-4 NASTools设…...

【JAVA基础】MAVEN的安装及idea的引用说明

本篇文章主要讲解&#xff0c;maven的安装及集成在idea中进行构建项目的详细操作教程。 日期&#xff1a;2024年11月11日 作者&#xff1a;任聪聪 所需材料&#xff1a; 1、idea 2024版本及以上 2、maven 3.9.9安装包 3、一个空java springBoot项目&#xff0c;可以使用阿里云…...

【go从零单排】Rate Limiting限流

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 中&#xff0c;速率限制&#xff08;Rate Limiting&#xff09;是一种控制…...

AI自动化部署实战:用hermes-setup-skill解决Hermes Agent部署难题

1. 项目概述&#xff1a;让AI助手成为你的自动化部署专家 如果你和我一样&#xff0c;经常在本地或远程服务器上折腾各种AI Agent项目&#xff0c;那么对Hermes Agent这个名字一定不陌生。作为NousResearch推出的一个功能强大的多平台AI助手框架&#xff0c;它能把你的LLM能力…...

高通Android音频HAL揭秘:从AudioFlinger到libaudiohal.so的加载与设备打开流程

高通Android音频HAL深度解析&#xff1a;从框架设计到硬件交互的全链路实现 在Android系统的多媒体生态中&#xff0c;音频子系统扮演着至关重要的角色。作为连接应用层与物理硬件的桥梁&#xff0c;音频硬件抽象层&#xff08;HAL&#xff09;的设计直接决定了设备的音频性能…...

从STM32转战华大HC32F4A0:手把手教你搞定TIM6的PWM输入捕获(附中断配置避坑点)

从STM32到HC32F4A0的PWM输入捕获实战&#xff1a;TIM6配置与中断避坑指南 对于习惯了STM32生态的嵌入式开发者来说&#xff0c;初次接触华大半导体的HC32F4A0系列MCU时&#xff0c;往往会遇到一些意料之外的挑战。PWM输入捕获作为电机控制、频率测量等应用中的核心功能&#xf…...

ClickHouse:开源数据引擎在AI浪潮爆发,挑战传统数据库巨头

ClickHouse&#xff1a;开源数据引擎爆发&#xff0c;在AI浪潮中挑战传统数据库巨头过去18个月&#xff0c;开源数据基础设施里最热的公司除了Supabase可能就是ClickHouse了。ClickHouse Cloud ARR在2025年保持250%的同比增速&#xff0c;第三方估计从2024年中的约1500万美元增…...

基于MCP协议构建团队AI共享记忆中枢:Trapic项目实战指南

1. 项目概述&#xff1a;为团队AI工具构建共享记忆中枢 如果你和你的团队在日常开发中&#xff0c;已经习惯了与Claude Code、Cursor这类AI编程助手进行深度对话&#xff0c;那么一个共同的痛点可能已经浮现&#xff1a;每次开启一个新的会话&#xff0c;AI助手都像一张白纸&a…...

光学邻近校正(OPC)技术:原理、优化与应用

1. 光学邻近校正技术概述在半导体制造的光刻工艺中&#xff0c;光学邻近效应&#xff08;Optical Proximity Effect&#xff09;是影响图案转移精度的主要挑战之一。当特征尺寸缩小到45nm及以下节点时&#xff0c;光衍射和光阻化学反应导致的图案失真变得尤为显著。具体表现为&…...

Gemini浏览器插件深度评测:3大隐藏功能+4个高危误用陷阱,Chrome用户必须立即自查

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini浏览器插件深度评测&#xff1a;3大隐藏功能4个高危误用陷阱&#xff0c;Chrome用户必须立即自查 Gemini 浏览器插件&#xff08;v2.4.1&#xff09;虽以“AI网页摘要”为公开定位&#xff0c;但…...

使用taotoken后c语言项目调用大模型的延迟与稳定性实际体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken后c语言项目调用大模型的延迟与稳定性实际体验 在开发一个需要集成大模型能力的C语言桌面应用时&#xff0c;我们面临…...

慢速乘与快速幂

慢速乘 在写程序进行乘法运算时&#xff0c;我们有时会遇到大数溢出的情况&#xff08;比如两个 101810^{18}1018 的数相乘对 1018710^{18}710187 取模&#xff09;。 这个时候我们就可以用慢速乘&#xff08;你用 __int128_t 的话就可以不用管&#xff09;。 一、原理 利用乘法…...

用HFSS Floquet Port仿真无限大阵列:从单元设计到S参数提取全流程解析

用HFSS Floquet Port仿真无限大阵列&#xff1a;从单元设计到S参数提取全流程解析 在相控阵天线和频率选择表面设计中&#xff0c;工程师常面临一个关键挑战&#xff1a;如何准确评估单个辐射单元在无限大周期阵列环境下的性能表现&#xff1f;传统有限阵列仿真不仅计算资源消耗…...