Qt中使用线程之QThread
使用Qt中自带的线程类QThread时
1、需要定义一个子类继承自QThread
2、重写run()方法,在run方法中编写业务逻辑
3、子类支持信号槽
4、子类的构造函数的执行是在主线程进行的,而run方法的执行是在子线程中进行的
常用方法
静态方法
获取线程id
可以得到当前线程的id
[static noexcept] Qt::HANDLE QThread::currentThreadId()
线程睡眠
void msleep(unsigned long msecs)//单位毫秒void sleep(unsigned long secs)//单位秒(since 6.6) void sleep(std::chrono::nanoseconds nsecs)//单位纳秒void usleep(unsigned long usecs)//单位微秒
公共方法
判断线程是否执行完毕
bool QThread::isFinished() const
判断线程是否正在运行
bool QThread::isRunning() const
判断线程是否被请求中断了
bool QThread::isInterruptionRequested() const
可以在子线程中的run函数中通过这个函数获知是否需要中断退出了
发出中断请求
调用这个方法可以向线程发起中断请求,调用后:isInterruptionRequested()会返回true
void QThread::requestInterruption()
等待线程
是一个阻塞函数,调用他来确保线程已经执行完毕
bool QThread::wait(QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever))
通常使用其默认参数,如果线程一直不执行完毕,那么该函数的调用者将会一直被阻塞,直到线程执行完毕
公有槽函数
启动线程
通常我们调用该函数来启动线程
[slot] void QThread::start(QThread::Priority priority = InheritPriority)
终止线程
通常我们调用该方法强制终止一个线程,但不建议
[slot] void QThread::terminate()
举例:
点击开启按钮,会开启一个线程
点击关闭按钮,会发出中断请求,使得线程退出
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QThread>
#include<QPushButton>class Thread01:public QThread
{Q_OBJECT
public:Thread01(int num):m_num(num){//构造函数的调用是在主线程//可以打印线程id,查看区别qDebug()<<"线程id:"<<QThread::currentThreadId();}~Thread01()=default;protected://重写run方法void run() override{//run函数在子线程中运行qDebug()<<"线程id:"<<QThread::currentThreadId();while(1){//如果请求中断的话就退出if(isInterruptionRequested()){return;}//循环自增,然后打印qDebug()<<m_num++;}}
private:int m_num=0;};class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr) : QWidget(parent){resize(300,300);QPushButton* btn=new QPushButton("开启线程",this);btn->setGeometry(10,10,100,100);QPushButton* btn2=new QPushButton("退出线程",this);btn2->setGeometry(10,btn->geometry().bottom()+10,100,100);//创建线程Thread01* th=new Thread01(100);//从100开始自增connect(btn,&QPushButton::clicked,this,[=](){//开启线程if(!th->isRunning()){th->start();}});connect(btn2,&QPushButton::clicked,this,[=](){//线程正在执行的话if(th->isRunning()){//中断线程th->requestInterruption();}//使用wait方法确保线程退出了if(th->wait()){qDebug()<<"线程退出了";}});}~Widget()=default;
private:};
#endif // WIDGET_H
学习链接:https://github.com/0voice
相关文章:
Qt中使用线程之QThread
使用Qt中自带的线程类QThread时 1、需要定义一个子类继承自QThread 2、重写run()方法,在run方法中编写业务逻辑 3、子类支持信号槽 4、子类的构造函数的执行是在主线程进行的,而run方法的执行是在子线程中进行的 常用方法 静态方法 获取线程id 可…...
多IP连接
一.关闭防火墙 systemctl stop firewalld setenforce 0 二.挂在mnt mount /dev/sr0 /mnt 三.下载nginx dnf install nginx -y 四.启动nginx协议 systemctl start nginx 五.修改协议 vim /etc/nginx/nginx.conf 在root前加#并且下一行添加 root /www:(浏…...
Linux重点yum源配置
1.配置在线源 2.配置本地源 3.安装软件包 4.测试yum源配置 5.卸载软件包...
289.生命游戏
目录 题目解法代码说明: 每一个各自去搜寻他周围的信息,肯定存在冗余,如何优化这个过程?如何遍历每一个元素的邻域?方向数组如何表示方向? auto dir : directions这是什么用法board[i][j]一共有几种状态&am…...
如何保证Redis和数据库的数据一致性
文章目录 0. 前言1. 补充知识:CP和AP2. 什么情况下会出现Redis与数据库数据不一致3. 更新缓存还是删除缓存4. 先操作缓存还是先操作数据库4.1 先操作缓存4.1.1 数据不一致的问题是如何产生的4.1.2 解决方法(延迟双删)4.1.3 最终一致性和强一致…...
Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的补充,更新了startActivity流程分析部分。 一般来说,有Activ…...
【LangChain系列2】【Model I/O详解】
目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、Model I/O模块2-0、Model I/O模块概要2-1、Format(Prompts Template)2-1-1、Few-shot prompt templates2-1-2、Chat模型的少样…...
动态规划-子数组系列——1567.乘积为正数的最长子数组
1.题目解析 题目来源:1567.乘积为正数的最长子数组——力扣 测试用例 2.算法原理 1.状态表示 因为数组中存在正数与负数,如果求乘积为正数的最长子数组,那么存在两种情况使得乘积为正数,第一种就是正数乘以正数,第…...
Linux 运行执行文件并将日志输出保存到文本文件中
在 Linux 系统中运行可执行文件并将日志输出保存到文本文件中,可以使用以下几种方法: 方法一:使用重定向符号 > 或 >> 覆盖写入(>): ./your_executable > logfile.txt这会将可执行文件的输…...
注册安全分析报告:北外网校
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
预警期刊命运逆袭到毕业好刊,仅45天!闭眼冲速度,发文量暴增!
选刊发表不迷路,就找科检易学术 期刊官网:Sustainability | An Open Access Journal from MDPI 1、期刊信息 期刊简介: Sustainability 是一本国际性的、同行评审的开放获取期刊,由MDPI出版社每半月在线出版。该期刊专注于人类…...
【LeetCode每日一题】——523.连续的子数组和
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 前缀和 二【题目难度】 中等 三【题目编号】 523.连续的子数组和 四【题目描述】 给你一个…...
leetcode54:螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[1,2,3,…...
全方面熟悉Maven项目管理工具(三)认识mvn的各类构建命令并创建、打包Web工程
1. POM(核心概念) 1.1 含义 POM: Project Object Model,项目对象模型。 DOM: Document Object Model,文档对象模型,和 POM 类似 它们都是模型化思想的具体体现 1.2 模型化思想 POM 表示将…...
MySQL中查询语句的执行流程
文章目录 前言流程图概述最后 前言 你好,我是醉墨居士,今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么,让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程,主要可以分为…...
【代码随想录Day47】单调栈Part02
42. 接雨水 题目链接/文章讲解:代码随想录 视频讲解:单调栈,经典来袭!LeetCode:42.接雨水_哔哩哔哩_bilibili 思路概述 问题理解:我们需要计算在给定柱子高度之间可以接住的雨水总量。雨水的量取决于柱子的高度和它们…...
Java全栈经典面试题剖析3】JavaSE面向对象2
目录 面试题2.12 Overload和Override的区别 面试题2.13 Overload方法是否可以改变返回值的类型? 面试题2.14 为什么方法不能根据返回类型来区分重载? 面试题2.15 构造器可不可以被重载或重写? 面试题2.16 在 Java 中定义⼀个不做事且没有…...
@JsonIgnoreProperties做接口对接时使用带来的好处
最近看到有个同事,在代码里面加了JsonIgnoreProperties这个注解,以前还真没有经常去用过,接口对接尤其是跟金蝶、用友等第三方,这个注解在接收数据是非常好用的;接下来带大家一起了解下具体的特性和使用方式 JsonIgno…...
SpringBoot整合mybatisPlus实现批量插入并获取ID
背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…...
实战RAG第一天——llama_index向量索引,查询引擎,搜索知识库问答,全部代码,保姆级教学
一、llama_index简介 llama_index(以前称为 GPT Index)是一个用于构建、查询、索引大型文档和数据集的开源框架。它的核心功能是帮助开发者将大语言模型(LLM)与自己的数据集无缝集成,从而进行知识库的构建、查询等任务。llama_index 使用 Python 编写,并结合了多种大语言…...
PipedInputStream和PipedOutputStream的源码分析和使用方法详细分析
一、PipedOutputStream(生产者)源码——向PipedInputStream(消费者)中的缓冲区(byte[]数组)写入字节数据的输出Stream(生产者)package java.io;import java.io.*;public class Piped…...
015、部署准备:Docker容器化与生产环境配置管理
015、部署准备:Docker容器化与生产环境配置管理 从一次凌晨三点的事故说起 上个月团队里有个服务在生产环境突然挂掉,日志里就一行“ConfigError: Missing ‘DATABASE_URL’”。排查半天才发现,运维同事更新容器镜像时漏了个环境变量。这种问题在虚拟机时代可能只是重启修复…...
修改 WindTerm 快捷键配置为Ctrl+V / Ctrl+C
为了让 复制 / 粘贴 的快捷键更符合 Windows 的使用习惯,可以按下面的方法修改 WindTerm 的配置文件。 一、找到配置文件 先进入 WindTerm 的安装目录,然后依次打开: global 文件夹 在该文件夹中找到以下配置文件之一: wind.keyma…...
千问3.5-2B在内容审核中的应用:自动识别敏感图文组合,降低人工复核成本
千问3.5-2B在内容审核中的应用:自动识别敏感图文组合,降低人工复核成本 1. 内容审核的挑战与机遇 每天,互联网上产生数以亿计的图文内容,如何高效识别其中的敏感信息成为平台运营者的重大挑战。传统人工审核方式面临三大痛点&am…...
3步攻克Dlib安装难题:Windows Python环境零编译实战指南
3步攻克Dlib安装难题:Windows Python环境零编译实战指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 你是否曾在Win…...
AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?
AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...
我设计了一套自己的多agent协作体系:星核协作体系
我设计了一套自己的多agent协作体系:星核协作体系 我自己的三省六部制我希望有一个能力强大的个人助手——这是我做星核最初的出发点。 当一个任务需要同时搞定架构设计、内容创作、代码实现、还要确保安全合规,指望一个Agent从头做到尾,基本…...
BEAST 2 终极指南:如何快速掌握贝叶斯分子进化分析工具
BEAST 2 终极指南:如何快速掌握贝叶斯分子进化分析工具 【免费下载链接】beast2 Bayesian Evolutionary Analysis by Sampling Trees 项目地址: https://gitcode.com/gh_mirrors/be/beast2 BEAST 2(Bayesian Evolutionary Analysis by Sampling T…...
告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程
告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程 1. 缘起:当官方驱动安装成为一场噩梦 那是一个普通的周末早晨,我满怀期待地拆开了刚到的RTX 5070显卡。作为一名长期使用Ubuntu进行深度学习开发的工程师&…...
Wan2.2-T2V-A5B轻量级优势:普通显卡也能秒出视频
Wan2.2-T2V-A5B轻量级优势:普通显卡也能秒出视频 1. 为什么选择轻量级视频生成模型 在AI视频生成领域,大多数模型对硬件的要求高得令人望而却步。传统视频生成模型通常需要专业级显卡和大量显存,这让普通开发者和内容创作者难以接触这项技术…...
