QT 中 多线程(备查)

基础

一个线程处理窗口事件,其他线程进行逻辑运算

在QT中使用多线程,需要额外注意的:
1)默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新
2)子线程负责后台的业务逻辑处理子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理
3)主线程子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

线程类QThread

常用工共成员函数
// 构造函数
QThread::QThread(QObject *parent = Q_NULLPTR);// 判断线程中的任务是不是处理完毕了
bool QThread::isFinished() const;// 判断子线程是不是在执行任务
bool QThread::isRunning() const;// 得到当前线程的优先级
Priority QThread::priority() const;// 设置线程优先级
void QThread::setPriority(Priority priority);
优先级:QThread::IdlePriority         --> 最低的优先级QThread::LowestPriorityQThread::LowPriorityQThread::NormalPriorityQThread::HighPriorityQThread::HighestPriorityQThread::TimeCriticalPriority --> 最高的优先级QThread::InheritPriority      --> 子线程和其父线程的优先级相同, 默认是这个// 退出线程, 停止底层的事件循环
// 退出线程的工作函数
void QThread::exit(int returnCode = 0);
// 调用线程退出函数之后, 线程不会马上退出,因为当前任务有可能还没有完成。// 等待任务完成, 然后退出线程, 一般情况下会在 exit() 后边调用这个函数
bool QThread::wait(unsigned long time = ULONG_MAX);
信号槽
// 和调用 exit() 效果是一样的
// 在用这个函数之后, 再调用 wait() 函数
[slot] void QThread::quit();// 启动子线程
[slot] void QThread::start(Priority priority = InheritPriority);// 线程退出, 可能是会马上终止线程, 一般情况下不使用这个函数
[slot] void QThread::terminate();// 线程中执行的任务完成了, 发出该信号
// 任务函数中的处理逻辑执行完毕了
[signal] void QThread::finished();// 开始工作之前发出这个信号, 一般不使用
[signal] void QThread::started();
静态函数
// 返回一个指向管理当前执行线程的QThread的指针
[static] QThread *QThread::currentThread();// 返回可以在系统上运行的理想线程数 == 和当前电脑的 CPU 核心数相同
[static] int QThread::idealThreadCount();// 线程休眠函数
[static] void QThread::msleep(unsigned long msecs);	// 单位: 毫秒
[static] void QThread::sleep(unsigned long secs);	// 单位: 秒
[static] void QThread::usleep(unsigned long usecs);	// 单位: 微秒
子线程任务 处理函数
// 子线程要处理什么任务, 需要写到 run() 中
[virtual protected] void QThread::run();

1)如果想让创建的子线程执行某个任务,需要写一个子类让其继承QThread,并且在子类中重写父类的run()方法
2)这是一个受保护的成员函数,不能够在类的外部调用,需要通过当前线程对象调用槽函数 start() 启动子线程。

子线程创建 (方式一)(适合简单的线程处理)

1)创建一个线程类,让其继承QT中的线程类 QThread

2)重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程

3)在主线程中new一个子线程对象

4)启动子线程, 调用 start() 方法

注意事项

主线程子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

在Qt中在子线程中不要操作程序中的窗口类型对象, 不允许, 如果操作了程序就挂了

只有主线程才能操作程序中的窗口对象, 默认的线程就是主线程

子线程创建(方式二)(适合复杂线程处理)

1)创建一个新的类,让这个类从QObject派生

2)在这个类中添加一个公共的成员函数,函数体就是我们要子线程中执行的业务逻辑

3)在主线程中创建一个 QThread 对象, 这就是子线程的对象

4)在主线程中创建工作的类对象(千万不要指定给创建的对象指定父对象)

5)将 myWork 对象移动到创建的子线程对象中, 需要调用 QObject 类提供的 moveToThread() 方法

6)启动子线程,调用 start(), 这时候线程启动了, 但是移动到线程中的对象并没有工作

7)调用 myWork 类对象的工作函数,让这个函数开始执行,这时候是在移动到的那个子线程中运行的

注意

最后一步,执行工作函数时需要用到信号槽去开启。
在这里插入图片描述

其他

计算一段程序的执行时间
	#include <QElapsedTimer>	QElapsedTimer time; //创建对象time.start();   //计时开始
//	for(int i=0; i<m_num; ++i)
//	{
//	    list.push_back(qrand()%10000);
//	}int mlisec = time.elapsed();    //计时结束qDebug()<< "生成随机数总共用时:" << mlisec << "毫米秒";
处理 lambda 表达式不兼容的 变量类型
qRegisterMetaType<QVector<int>>("QVector<int>");

在这里插入图片描述

详细教程可转

爱编程的大丙

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

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

相关文章

Python插件 - 动态 简单账表 通过SQL存储过程输出列实现动态展示

第一步 新建一个简单账表加上表头标签 第二步 新建一个过滤框 第三步 修改过滤窗口标识 第四步 注册插件 python代码实现 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddRe…

禁止ubuntu自动更新显卡驱动

​使用 apt-mark hold命令 apt-mark hold命令可以帮助我们锁定软件包的版本&#xff0c;防止 Ubuntu 自动更新该软件。 具体操作步骤如下&#xff1a; 1. 打开终端&#xff0c;使用以下命令来查看当前安装的显卡驱动软件包&#xff1a; dpkg -l | grep -i nvidia 2. 执行以…

Python 对中文名称逐字按字母表进行排序并输出

使用场景 代码适用于需要对中文名称进行排序并规范化输出的情景&#xff0c;具体为处理一个包含中文姓名的文本文件&#xff0c;按姓名的拼音首字母进行排序&#xff0c;并以规范的格式输出。 排序规则&#xff1a; 将名称按照姓氏首字母A-Z的次序&#xff0c;进行排序&#x…

LeetCode-164. 最大间距【数组 桶排序 基数排序 排序】

LeetCode-164. 最大间距【数组 桶排序 基数排序 排序】 题目描述&#xff1a;解题思路一&#xff1a;桶排序&#xff0c;这种方法比较简单&#xff0c;记住3个公式即可。如下&#xff1a;解题思路二&#xff1a;基数排序&#xff0c;其实和桶排序差不多&#xff0c;就是直接分为…

孩子都能学会的FPGA:第二十二课——用FPGA实现计数时钟的奇数次分频

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

使用SQL中的LIKE操作符进行模糊匹配:原理与用法

LIKE操作符的基本原理&#xff1a; LIKE操作符用于在SELECT语句中进行模糊匹配&#xff0c;通常与通配符%一起使用。%表示匹配任意长度的任意字符&#xff0c;例如%apple%可以匹配包含apple字符串的任意位置的字符串。而其他的通配符如下&#xff1a; _ 表示匹配一个任意字符[…

内核定时器

一、时钟中断 硬件有一个时钟装置&#xff0c;该装置每隔一定时间发出一个时钟中断&#xff08;称为一次时钟嘀嗒-tick&#xff09;&#xff0c;对应的中断处理程序就将全局变量jiffies_64加1 jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量&#xff0…

用pip更新、安装python的包

查看pip的版本&#xff1a;python -m pip --version 例如&#xff0c;查看下pip的版本&#xff0c;在cmd下输入命令python -m pip --version&#xff0c;可以发现当前安装的pip的版本是23.2.1&#xff1a; 查看一个包的详情&#xff1a;python -m pip show 例如&#xff0c…

Python 调用企业微信群机器人发送消息及文件

Python 操作企业微信群机器人。 企业微信群创建机器人 &#xff1a; 安装 requests json &#xff1a; pip install requests pip install json发送消息&#xff08;markdown&#xff09; import requests import json# 企业微信机器人发送文字 def send_markdown (message, …

【信息安全】-个人敏感信息、个人信息、个人金融信息

文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…

xxl-job简单实用

仅仅为了记录一下xxl-job的使用&#xff0c;针对新手而言&#xff01; 1.开始准备 源码仓库地址Release Downloadhttps://github.com/xuxueli/xxl-jobDownloadhttp://gitee.com/xuxueli0323/xxl-jobDownload

cmd下查看python命令的用法

在cmd下&#xff0c;可以运行python --help或者py --help来查看python命令的用法。例如&#xff1a;

C++11改进观察者模式

观察者模式定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 先看一个简单的观察者模式是如何实现的&#xff1a; #include <iostream> #include <vector> #include <map> …

《计算机算法设计与分析(第5版)》笔记

文章目录 [toc]第一章&#xff1a;算法概述1.1|算法与程序算法性质 程序 1.2|算法复杂性分析算法复杂性时间复杂性最坏情况下的时间复杂性最好情况下的时间复杂性平均情况下的时间复杂性 渐进复杂性 O O O表示法、 Ω \Omega Ω表示法、 θ \theta θ表示法、 o o o表示法 O O …

一起学docker系列之十七Docker Compose 与手动操作的比较与优势分析

目录 1 前言2 不使用 Docker Compose2.1 启动 MySQL 容器2.2 启动 Redis 容器2.3 启动微服务容器 3 使用 Docker Compose4 使用 Docker Compose 的优势5 结语参考地址 1 前言 在当今容器化应用的开发与部署中&#xff0c;容器编排工具的选择对于简化流程、提高效率至关重要。本…

24、pytest通过xfail将测试函数标记为预期失败

官方实例 # content of test_xfail.py import pytest import syspytest.mark.xfail def test_function():print("test_function was invoked.")def valid_config():return Falsedef test_function_02():if not valid_config():pytest.xfail("failing configura…

集体建筑业总产值数据,shp/excel格式,1990-2021年,可直接下载

建筑业总产值指以货币表现的建筑业企业在一定时期内生产的建筑业产品和服务的总和。建筑业总产值包括建筑工程产值、安装工程产值和其他产值三部分内容&#xff0c;不包括境外产值。 建筑业总产值是指以货币表现的建筑业企业在一定时期内生产的建筑业产品和服务的总和。 建筑…

代数学笔记8: Sylow定理

Sylow定理 ∣ G ∣ p r ⋅ m |G|p^r\cdot m ∣G∣pr⋅m, ( m , p ) 1 (m,p)1 (m,p)1, 则 G G G中必有 p r p^r pr阶子群. 证明: 应用 例子: 15阶群必定是循环群. 因为 15 3 5 153\times 5 1535, 所以15阶群有 3 3 3阶群或 5 5 5阶群, 设3阶群有 n 3 n_3 n3​个, 5阶群有…

金蝶EAS从哪里查看 即使库存的金额?

【财务会计】——【存货核算】——【报表分析】——【存货收发存汇总表】 从这里能看到即使库存的金额

机器人制作开源方案 | 自主型收集餐盘机器人

作者&#xff1a;蔡佳怡、朱启会、郭晨杰、杨昊天、焦家辉 单位&#xff1a;西安外事学院 指导老师&#xff1a;杜喜昭、张燕 1. 产品说明 1.1 设计目的 对于如学校、工厂这种大型食堂&#xff0c;一般的收餐盘模式为用餐人用餐完毕后&#xff0c;把餐盘拿到最近的收餐盘点&…