QT中的多线程有什么作用?

news2024/11/22 22:19:55

概述

在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。

1. 使用多线程有什么好处?

1.1

提高应用界面的响应速度。这对于开发图形界面程序尤其重要,当一个操作耗时很长时(比如大批量I/O或大量矩阵变换CPU密集操作),整个系统都会等待这个操作,程序就不能响应键盘、鼠标、菜单等操作,而使用多线程技术可将耗时长的操作置于一个新的线程,从而不会影响到主GUI线程,从而避免上述问题。

1.2

使多核心CPU系统更加有效:当线程数不大于CPU核数时,操作系统可以调度不同的线程运行于不同的CPU核上。

1.3

改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为独立或半独立的运行部分,这样有利于程序的理解和维护。

2. 线程编程流程

a. 子类化QThread:重写一个类,继承自QThread。

b. 重写 run 函数,run函数内有一个 while 或 for 的循环:执行耗时操作。

c. 子线程类实现公共方法,供主线程传参。主线程调用start方法开始子线程。

d. 设置一个标记为来控制循环的退出,或者父线程调用terminate停止子线程。

e. 设置必要的信号和槽做连接--子线程给主线程传参

注意:所有的界面操作都必须在GUI主线程来进行,子线程是不允许操作界面上的任何部件!

3. 编程实例

QThread 类

Public Functions
	QThread(QObject *parent = 0) //构造函数  //pthread_create
	bool    isFinished() const  //判断线程是否退出
	bool    wait(unsigned long time = ULONG_MAX)   //pthread_join(&id)
	//等待某个线程结束,最多等待time ms,如果时间没有设置,那么永远等待。

Public Slots
	void	start(Priority priority = InheritPriority)  //启动线程必须使用start
	void	terminate()-->杀死线程  //pthread_cancel

Static Public Members
	Qt::HANDLE	currentThreadId() [static] //得到当前执行者线程ID,可以直接qDebug
	void	sleep(unsigned long secs) [static]
	void	msleep(unsigned long msecs) [static]
	void	usleep(unsigned long usecs) [static]

	睡眠函数不能在主线程调用,会造成界面卡死。

Protected Functions	
	virtual void run();  //启动新线程不能直接调用run,需要调用start接口,
						//start会启动新线程,然后执行run里的代码块。

这里在线程中延时了五秒

因为是视频,就不好放了,感兴趣的可以去试一试,结果的话就是LcdNumber一直在增加。

关于线程还有很多使用的方法,这里也只是写了一个线程,实际运用中我们应该会使用多线程进行操作,大家可以自行发挥。

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

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

相关文章

嵌入式Linux学习day22

时间接口&#xff1a; 头文件&#xff1a;#include<time> 1.time&#xff08;&a&#xff09; 用time_t 定义a 功能&#xff1a;返回1970-1-1到现在的秒数 参数&#xff1a;存放秒数空间的首地址 2.localtime(&a) 功能&#xff1a;将秒数转化为本地时间 参…

[C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强

【算法介绍】 提升夜间雾霾图像可见度的技术研究&#xff1a;引导APSF与梯度自适应卷积的应用 随着城市化的快速发展&#xff0c;雾霾现象日益严重&#xff0c;尤其是在夜间&#xff0c;雾霾对图像的可见度造成了极大的影响。因此&#xff0c;提升夜间雾霾图像的可见度成为了…

C#,洗牌问题(Card Shuffle Problem)的算法与源代码

1 洗牌问题&#xff08;Card Shuffle Problem&#xff09; 洗牌问题&#xff08;Card Shuffle Problem&#xff09;的基本描述 你有 100 张牌&#xff0c;从 1 到 100。 你把它们分成 k 堆&#xff0c;然后按顺序收集回来。 例如&#xff0c;如果您将它们分成 4 堆&#xff0…

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

Latent Diffusion Models / Stable Diffusion(LDM)

High-Resolution Image Synthesis with Latent Diffusion Models&#xff08;CVPR 2022&#xff09;https://arxiv.org/abs/2112.10752latent-diffusionstable-diffusion cross-attention&#xff08;用于多模态任务&#xff09; Cross-attention vs Self-attention&#xff…

外汇天眼:交易讲究时机,不要在这几个时间交易

每个交易者都想知道&#xff0c;什么时候是入场买卖的最好时机。 到底是1.1800入场呢&#xff1f; 还是等到1.1900&#xff1f; 但是&#xff0c;交易中不仅仅是关于从哪里入场&#xff0c;同样的&#xff0c;知道什么时候不去交易也是非常重要的。 这听起来像是一回事&#x…

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

网络原理 - HTTP/HTTPS(4)

HTTP响应详解 认识"状态码"(status code) 状态码表示访问一个页面的结果.(是访问成功,还是失败,还是其它的一些情况...).(响应结果如何) 学习状态码 -> 为了调试问题. 写服务器时,按照状态码的含义正确使用. 200 OK 这是最常见的状态码,表示访问成功. 抓包抓…

超详细!三款内衣洗衣机PK评测,希亦、觉飞、由利谁更胜一筹?

内衣裤作为我们日常必备的贴身衣物&#xff0c;所以对卫生方面的要求也比较高&#xff0c;但对许多人们而言&#xff0c;对内衣裤进行清洗是一项相当繁琐的事情&#xff0c;主要是因为并不能直接把内衣裤放入大型洗衣机里和其它衣服混合洗&#xff0c;所以大多数用户都会自己动…

不止于框架:全面深入Spring MVC,成就开发高手

介绍&#xff1a;Spring MVC是一个基于Java的轻量级Web框架&#xff0c;它实现了MVC&#xff08;Model-View-Controller&#xff09;设计模式。以下是对Spring MVC的详细介绍&#xff1a; MVC架构模式&#xff1a;Spring MVC遵循MVC架构模式的思想&#xff0c;将应用程序分为模…

几个常见的C/C++语言冷知识

当涉及到C/C语言时&#xff0c;有一些冷知识可能并不为人所熟知&#xff0c;但却可以让你更深入地理解这门古老而强大的编程语言。以下是一些有趣的C/C语言冷知识。 1. 数组的下标可以是负数 在我们日常的C语言编程中&#xff0c;数组是一个非常常见的数据结构。我们习惯性地使…

CSS 函数详解url、min、rgb、blur、scale、rotate、translate等

随着技术的不断进步&#xff0c;CSS 已经从简单的样式表发展成为拥有众多内置函数的强大工具。这些函数不仅增强了开发者的设计能力&#xff0c;还使得样式应用更加动态、灵活和响应式。本文将深入探讨 CSS 常见的 66 个函数&#xff0c;逐一剖析它们的功能和用法&#xff0c;一…

Linux目录:scp命令

目录 1 scp命令1.1简介1.2命令说明1.3 实例1、从本地复制的远程2、从远程复制到本地3、-r&#xff1a;复制目录4、 -p&#xff1a;保留原文件的修改时间&#xff0c;访问时间5、-P&#xff1a;指定传输数据的端口6、扩展&#xff1a;修改ssh默认端口 1 scp命令 1.1简介 scp 是…

如何在Shopee平台上选择爆款商品:借鉴爆款属性的有效策略

在当今激烈竞争的电商市场中&#xff0c;想要在Shopee平台上取得成功&#xff0c;卖家需要精心选择潜在的热销产品。借鉴爆款商品的属性是一种行之有效的策略&#xff0c;能够帮助卖家快速找到市场上的热门商品。通过分析市场趋势、竞品表现、社交媒体趋势等多方面因素&#xf…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工…

String字符串,FastJson常用操作方法

JSON字符串操作 1、创建配置环境 # 引入测试包testImplementation group: org.springframework.boot, name: spring-boot-starter-test, version: 2.2.6.RELEASE # 创建测试类RunWith(SpringRunner.class)SpringBootTestpublic class JsonTest {Testpublic void test(){Syste…

13.Qt 文件的读和写,样式表文件的读用

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 ①浏览按键 ②保存按键 ③加载样式按键 参考&#xff1a; 前言&#xff1a; 上一篇文章说明了如何弹窗选取文件并在Qlabel中显示文件内容 12.QT文件对话框 文件的弹窗选择-QFileDialog 这篇…

Gitlab CI 报错: /usr/bin/bash: line 137: kubectl: command not found

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目&#xff0c;并且想将这些模块发布到不同的仓库或目标位置&…

机器学习基础(四)非监督学习的进阶探索

导语&#xff1a;上一节我们详细探索监督学习的进阶应用&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;三&#xff09;监督学习的进阶探索-CSDN博客文章浏览阅读296次&#xff0c;点赞13次&#xff0c;收藏11次。监督学习作为机器学习的一个主要分支&#xff0c;…