QT 中 线程池 (备查)

QRunnable类 API

1)在Qt中使用线程池需要先创建任务,添加到线程池中的每一个任务都需要是一个 QRunnable 类型,因此在程序中需要创建子类继承 QRunnable 这个类。
2)然后重写 run() 方法,在这个函数中编写要在线程池中执行的任务。
3)并将这个子类对象传递给线程池,这样任务就可以被线程池中的某个工作的线程处理掉了。

// 在子类中必须要重写的函数, 里边是任务的处理流程
[pure virtual] void QRunnable::run();void QRunnable::setAutoDelete(bool autoDelete);
// 参数设置为 true: 这个任务对象在线程池中的线程中处理完毕, 这个任务对象就会自动销毁
// 参数设置为 false: 这个任务对象在线程池中的线程中处理完毕, 对象需要程序猿手动销毁// 获取当前任务对象的析构方式,返回true->自动析构, 返回false->手动析构
bool QRunnable::autoDelete() const;

创建一个任务类

class MyWork : public QObject, public QRunnable
{Q_OBJECT
public:explicit MyWork(QObject *parent = nullptr){setAutoDelete(true); // 任务执行完毕,该对象自动销毁}~MyWork();void run() override{}
}
//MyWork类是一个多重继承,如果需要在这个任务中使用Qt的信号槽机制进行数据的传递就必须继承QObject这个类,否者不用。

QThreadPool 类 API

1)每个Qt应用程序都有一个全局 QThreadPool 对象,可以通过调用 globalInstance() 来访问它。
2)也可以单独创建一个 QThreadPool 对象使用。

// 获取和设置线程中的最大线程个数
int maxThreadCount() const;
void setMaxThreadCount(int maxThreadCount);// 给线程池添加任务, 任务是一个 QRunnable 类型的对象
// 如果线程池中没有空闲的线程了, 任务会放到任务队列中, 等待线程处理
void QThreadPool::start(QRunnable * runnable, int priority = 0);// 如果线程池中没有空闲的线程了, 直接返回值, 任务添加失败, 任务不会添加到任务队列中
bool QThreadPool::tryStart(QRunnable * runnable);// 线程池中被激活的线程的个数(正在工作的线程个数)
int QThreadPool::activeThreadCount() const;// 尝试性的将某一个任务从线程池的任务队列中删除, 如果任务已经开始执行就无法删除了
bool QThreadPool::tryTake(QRunnable *runnable);// 将线程池中的任务队列里边没有开始处理的所有任务删除, 如果已经开始处理了就无法通过该函数删除了
void QThreadPool::clear();// 在每个Qt应用程序中都有一个全局的线程池对象, 通过这个函数直接访问这个对象
static QThreadPool * QThreadPool::globalInstance();

1)一般情况,不需要在Qt程序中创建线程池对象,直接使用Qt为每个应用程序提供的线程池全局对象即可。
2)得到线程池对象之后,调用**start()**方法就可以将一个任务添加到线程池中。

案列

//mywork.hclass MyWork :public QRunnable{Q_OBJECTpublic:explicit MyWork();~MyWork();void run() override;}
//mywork.cppMyWork::MyWork() : QRunnable(){// 任务执行完毕,该对象自动销毁setAutoDelete(true);}void MyWork::run(){// 业务处理代码......}
//mainwindow.cpp// 线程池初始化,设置最大线程池数QThreadPool::globalInstance()->setMaxThreadCount(4);// 添加任务MyWork *task = new MyWork;QThreadPool::globalInstance()->start(task);   

详细教程可转

爱编程的大丙

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

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

相关文章

RabbitMQ使用指南

介绍主要特点常用插件使用RabbitMQ的插件常用插件列表 应用场景Kafka与RabbitMq的区别主要优缺点安装步骤插件安装步骤 使用RabbitMqJava代码示例拓展 介绍 RabbitMQ是由Erlang语言开发的,基于AMQP(高级消息队列协议)协议实现的开源消息代理…

元宇宙红色展厅VR虚拟展馆提高受训者的参与感

生活在和平年代的新一代青少年,可能对革命先烈英勇事迹难以有很深的体会,无法切实感受到中国共产党无畏牺牲、誓死保家卫国的红色精神,因此借助VR虚拟现实制作技术,让参观者们走近革命先烈中,感受老一辈无产阶级革命家…

搜索引擎和网络浏览器之间的区别

术语“搜索引擎”和“网络浏览器”与互联网有关。搜索引擎基本上是用于通过 Internet 搜索信息的工具,而 Web 浏览器是用于加载网页等 HTML 文件的应用软件。 阅读本文以了解有关搜索引擎和网络浏览器以及它们之间的区别的更多信息。 什么是搜索引擎? …

TrustZone之SMC异常

作为支持两个安全状态的一部分,该架构包括了Secure Monitor Call(SMC)指令。执行SMC会引发Secure Monitor Call异常,该异常目标是EL3。 通常,SMC用于请求服务,可以是来自驻留在EL3中的固件,也可…

微信小程序适配方案:rpx(responsive pixel响应式像素单位)

小程序适配单位:rpx 规定任何屏幕下宽度为750rpx 小程序会根据屏幕的宽度自动计算rpx值的大小 Iphone6下:1rpx 1物理像素 0.5css 小程序编译后,rpx会做一次px换算,换算是以375个物理像素为基准,也就是在一个宽度…

迭代器失效及解决办法

当使用迭代器遍历容器并删除元素时&#xff0c;迭代器可能会失效。 对于vector来说&#xff0c;如果使用普通迭代器&#xff08;例如std::vector<int>::iterator&#xff09;进行遍历和删除操作&#xff0c;当你删除一个元素后&#xff0c;后面的元素会向前移动填补空缺…

服务器如何保证数据安全_Maizyun

服务器如何保证数据安全 在当今的数字化时代&#xff0c;数据安全已经成为企业和社会组织必须面对的重要问题。服务器作为存储和处理大量数据的核心组件&#xff0c;必须采取有效的措施来确保数据的安全。本文将探讨服务器如何保证数据安全。 一、访问控制和身份认证 访问控…

nvm,node,npm,yarn相关安装报错问题记录

问题一&#xff1a; yarn : 无法加载文件 D:\jsPackage\nodejs\node_global\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。 解决&#xff1a; 步骤1,powerShell以管理员运行后&#xff0c;输入命令: get-ExecutionPolicy 查看权限, 会看到它的返回值是 Restricted , 意…

计算一组x和y(一维数组)

输入30个整数a1,a2,a3,…,a30&#xff0c;计算所有的x与y。已知&#xff1a; 输入格式: 30个整数 输出格式: 计算得到的x1, x2,.......,x10 计算得到的y1, y2,.......,y10 所有输出精确到小数点后3位。 注意&#xff1a; 1、输出的每个“”左右各有一个空格&#xff0c;输出…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司&#xff08;简称“兴业银行”&#xff09;成立于1988年8月&#xff0c;2022年总资产9.27万亿元&#xff0c;是经国务院、中国人民银行批准成立的首批股份制商业银行之一&#xff0c;总行设在福州市。现已发展成为横跨境内外&#xff0c;线上线下结合&…

12.8 作业

1&#xff0c; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#…

什么是git pr

“Git PR” 指的是 Git 中的 Pull Request&#xff0c;是一种协作开发的工作流程。Pull Request 提供了一种将代码从一个分支&#xff08;通常是开发者个人的分支&#xff09;合并到另一个分支&#xff08;通常是主分支&#xff09;的机制&#xff0c;并在合并前进行代码审查和…

FLStudio中文2024中文最新汉化安装包下载

FLStudio中文21最新版本以其使用速度而闻名&#xff0c;是一个高度复杂的音乐制作环境。FL Studio免费&#xff0c;联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先&#xff0c;它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

探索 SNMPv3 魔法:armbian系统安装snmp服务并通过SNMPV3进行连接控制

文章目录 说明SNMP服务的安装本机连接SNMPV3操作MIB Browser连接SNMPV3问题总结密码过短权限配置错误&#xff0c;导致OID不存在 说明 工具 建议尝试专业版ireasoning MIB brower&#xff0c;因为只有专业版支持SNMP v3的连接。当然&#xff0c;也可以尝试其他SNMP客户端工具 …

[足式机器人]Part4 南科大高等机器人控制课 Ch03 Operator View of Rigid-Body Transformation

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch03 Operator View of Rigid-Body Transformation 1. Rotation Operation via Differential Equation1.1 Skew Symmetr…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络…

kennard-stone算法实现样本集划分(ks算法)

目录 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; 二、Kennard-Stone算法作用 三、代码 四、对选出来的train样本使用T-SNE算法进行绘制 五、参考链接 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; KS算法原理&#xff1a;把所有的样本都看…

测试学习笔记1:@SpringbootTest测试注解详解

SpringBootTest是一个用于在springboot应用程序中启动完整应用的测试环境注解。它主要用于集成测试&#xff0c;可以启动一个嵌入式的数据库&#xff0c;加载完整的spring上下文&#xff0c;并自动装配测试类的ApplicationContext。 以下是SpringBootTest的关键特性&#xff1a…

机器学习实验四:贝叶斯分类器

系列文章目录 机器学习实验一&#xff1a;线性回归机器学习实验二&#xff1a;决策树模型机器学习实验三&#xff1a;支持向量机模型机器学习实验四&#xff1a;贝叶斯分类器机器学习实验五&#xff1a;集成学习机器学习实验六&#xff1a;聚类 文章目录 系列文章目录一、实验…

47.0/超链接的使用(详细版)

目录 47.1 创建超链接的基本语法 47.2 路径 47.2.1 绝对路径 47.2.2 相对路径 47.2.3 相对路径和绝对路径举例 47.3 内部超链接的建立 47.4 外部超链接的建立 47.5 书签链接 47.6 target 属性 HTML 文件中最重要的应用之一就是超链接。正因为有了超链接,互联网 上的各种资源才…