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);
详细教程可转
爱编程的大丙
相关文章:
QT 中 线程池 (备查)
QRunnable类 API 1)在Qt中使用线程池需要先创建任务,添加到线程池中的每一个任务都需要是一个 QRunnable 类型,因此在程序中需要创建子类继承 QRunnable 这个类。 2)然后重写 run() 方法,在这个函数中编写要在线程池中…...
LeetCode刷题笔记第71题:简化路径
LeetCode刷题笔记第71题:简化路径 题目 给定一个路径,简化路径 要求: 1、以’/‘开头 2、两个目录之间只有一个’/’ 3、不能以’/‘结尾 4、路径中不能有’.‘和’…’ 想法 利用栈的数据存储方式的思想,将路径字符顺序入栈遇…...
JavaScript <md5加密的两种不同输出结果分析>--案例(二点一)
前言: 问题是这样的,在浏览器中看到这段代码 然后在控制台进行输出.得到: 紧接着,就在,js文件里面进行转译: 可是,得到的结果是: 这是问题!!! 正题: 为什么相同的js代码,在 .js 文件中的输出与 Chrome 控制台中的输出不一样? 环境差异:不同的JavaScript环境&…...
『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器配置Nginx静态网页
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器(Elastic Compute Cloud)是亚马…...
28、卷积 - 卷积的基础公式
本节推导一下卷积的基础公式,还是先上一张卷积运算的示意图图。 我们知道,一张图片有 3 个维度,分别是长、宽、通道。 这三个维度分别用 3 个字母代替,分别是 H(Height, 对应的是长这一维度), W(Width, 对应的是宽这一维度),C(Channel,对应的是通道这一维度)。 对于…...
Mac电脑vm虚拟机 VMware Fusion Pro中文 for mac
VMware Fusion Pro是一款功能强大的虚拟机软件,适用于需要在Mac电脑上运行其他操作系统的用户。它具有广泛的支持、快速稳定的特点以及多种高级功能,可以满足用户的各种需求和场景。 多操作系统支持:VMware Fusion Pro允许在Mac电脑上运行多…...
区块链技术的应用场景和优势
目录 一、引言 二、什么是区块链技术 三、区块链技术的应用场景 1.金融领域 (1)支付和清算:区块链可以为支付和金融结算提供更加快速、安全、便捷的方式。例如瑞士银行UBS和Deutsche Bank已经合作开发了基于区块链的支付和清算系统。 &a…...
java面试题-谈谈sql优化-mysql
远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 这是面试总结出来的几点,每次问道都是这么回…...
【Linux服务器Java环境搭建】07 在linux中安装MySql,以及对MySQL的配置与远程连接
【Linux服务器Java环境搭建】01购买云服务器以及在服务器中安装Linux系统 【Linux服务器Java环境搭建】02 通过xftp和xshell远程连接云服务器 【Linux服务器Java环境搭建】03 Git工具安装 【Linux服务器Java环境搭建】04 JDK安装(JAVA环境安装) 【Linux服…...
用 LangChain 搭建基于 Notion 文档的 RAG 应用
如何通过语言模型查询 Notion 文档?LangChain 和 Milvus 缺一不可。 在整个过程中,我们会将 LangChain 作为框架,Milvus 作为相似性搜索引擎,用二者搭建一个基本的检索增强生成(RAG)应用。在之前的文章中&a…...
QT中如何使用自定义控件
在 Qt 中,要使用自定义控件,需要遵循以下步骤: 创建自定义控件: 首先,需要创建一个自定义控件类,该类继承自 QWidget 或 QGraphicsItem 等基本控件类,并实现其相关函数和槽函数等。 在头文件中…...
xcode ——Instrumets(网络连接调试)使用
环境: instruments 使用只能在真机调试时使用,且真机系统必须ios15 点击debug 按钮——Network——Profile in Instruments 然后就可以看到如下面板 展开运行的项目,点击session下的域名,下方回出现该域名下的网络请求。点击Deve…...
Ps:文字操作常用快捷键
对文字的设置操作,可在工具选项栏或“字符”面板上进行。但是,如果能记住并使用快捷键,可大大提高工作效率。 设置文字颜色 Color 1、选中几个或全部文字后,除了使用工具选项栏上的“颜色”按钮,还可以使用快捷键 Alt…...
SpringSecurity的默认登录页的使用
SpringSecurity的默认登录页的使用 01 前期准备 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mysql驱动--><dependency><grou…...
【Rust日报】2023-12-04 slint 成功案例
slint 成功案例 SK Signet是美国领先的电动车充电解决方案提供商,推出了适用于其电动车充电桩的新型HMI(人机界面)。支持15英寸和32英寸触摸屏。 该HMI由Slint制作,为充电站运营商提供了额外的商机。SK Signet经理Sang-Baek Lee表…...
嵌入式硬件和软件哪个好?
嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的,首先我们先来看看嵌入式硬件工程师吧! 嵌入式硬件开发工程师主要编写嵌入式系统硬件总体方案和详细方案,要求理解嵌入式系统架构,有一…...
MySQL 8.x 自签证书通过keytool和openssl转成JKS文件
一、写在前面 数据库MySQL 8.0 通过自签命令在datadir下生成了所有的证书文件。由于Java的JDK不支持直接加载PEM格式的证书,所以需要将PEM格式证书转换成Java能够直接加载的JKS格式证书。我们需要将根证书ca.pem转换成JKS格式的根证书truststore.jks,将…...
MybatisPlus概述
MybatisPlus概述 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通…...
C++之枚举与宏定义
1 枚举enum C的枚举类型可以用来表示一组有限且固定的值。比如在如下代码中: enum Color { RED, GREEN, BLUE };定义了Color的枚举类型,分别对应三种不同的颜色。C编译器会为枚举类型的常量分配整数值,从0开始递增。因此,在这个…...
DAPP开发【09】NFT交易市场开发(hardhat测试)
测试文件下新建market.js文件 扁平化,将所有依赖放在tmp.sol,可以去给他人使用 npx hardhat flatten > tmp.sol 测试文件 const {expect} require(chai); const {ethers} require(hardhat);describe(Market,async function(){//定义三个合约&a…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
