27. 多线程技术

news/2025/1/15 20:11:54/文章来源:https://www.cnblogs.com/FlurryHeart/p/18673665

一、多线程技术

  QThread 类是 PySide 中的核心线程类,要实现一个线程,需要创建 QThread 类的有一个子类,并且实现其 run() 方法。

  线程也有自己自己的生命周期,其中包含 5 种状态,分别为:新建状态就绪状态运行状态阻塞状态** 和 死亡状态新建状态 就是线程被创建时的状态;当线程对象调用 start() 方法后,线程就处于 就绪状态,当线程得到系统资源后就进入 运行状态

  一旦线程进入运行状态,它会在就绪和运行状态下切换,同时也可能进入阻塞或死亡状态。当处于 运行状态 下的线程在调用 sleep()wait() 方法或者发生阻塞时,会进入 暂停状态;当在休眠结束或者阻塞解除时,线程会重新进入 就绪状态;当线程的 run() 方法执行完毕,或者线程发生错误、异常时,线程就进入 死亡状态

  我们可以在终端中使用 pip 安装 pyside6 模块。

pip install pyside6

  QThread 类的常用方法及其说明如下:

start(priority:QThread.Priority=QThread.Priority.InheritPriority) -> None       # 启动线程
run() -> None                                                                   # 线程的起点
wait(time:int) -> None                                                          # 阻塞线程
usleep(us:int) -> None                                                          # 以微秒为单位休眠线程
msleep(ms:int) -> None                                                          # 以毫秒为单位休眠线程
sleep(s:int) -> None                                                            # 以秒为单位休眠线程
exit(retcode:int=0) -> int                                                      # 退出线程的事件循环,并返回代码,返回0表示成功,任何非0值都表示错误
quit() -> int                                                                   # 退出线程的事件循环,并返回代码0(成功),相当于exit(0)
terminate() -> None                                                             # 强制终止线程
setPriority(priority:QThread.Priority.IdlePriority) -> None                     # 设置线程的优先级
isRunning() -> bool                                                             # 获取线程是否在运行
isFinished() -> bool                                                            # 获取线程是否完成

  我们可以调用 setPriority(priority) 方法来设置线程的优先级,其中 priority 为 QThread.Priority 的枚举值,可以取值如下:

QThread.Priority.IdlePriority            # 空闲优先级
QThread.Priority.LowestPriority          # 最低优先级
QThread.Priority.LowPriority             # 低优先级
QThread.Priority.NormalPriority          # 系统默认优先级
QThread.Priority.HighPriority            # 高优先级
QThread.Priority.HighestPriority         # 最高优先级
QThread.Priority.TimeCriticalPriority    # 尽可能频繁地分配执行
QThread.Priority.InheritPriority         # 默认用与创建线程相同地优先级

  在调用 start() 方法启动线程后,新创建的线程将调用 run() 方法开始执行。如果我们向强制终止线程,可以调用 terminate() 方法,在 terminate() 方法之后应该使用 wait() 方法,以确保当线程终止时,等待完成的所有线程都将被唤醒
QThread 类常用的信号及其说明如下:

started()       # 在调用run()方法之前,在相关线程开始执行时从该线程发射
finished()      # 在相关线程完成执行之前,从该线程发射
import sysfrom PySide6.QtWidgets import QApplication
from PySide6.QtCore import QThreadclass Thread(QThread):def __init__(self):# 调用父类的初始化方法super(Thread, self).__init__()def run(self):"""重写run()方法"""num = 10while num >=0 :print(num)# 线程休眠1秒Thread.sleep(1)if num == 0:# 退出线程self.quit()num -= 1if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建线程对象thread = Thread()# 3.启动线程thread.start()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

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

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

相关文章

插头DP记录

关于插头dp。AAA黑题批发。 这个东西好像设问还挺广泛的,做到哪写到哪吧。 得先了解一下轮廓线dp定义。 概念 设问广泛但是总体来说是连通性相关状压dp的一类设计方法。 骨牌覆盖问题 比如说,最简单的,问你 \(n*m\) 的棋盘格里能放多少 \(1*2\) 的骨牌。 考虑把一个节点分为…

03_LaTeX之文档元素

在知道了如何输入文字后,在本章了解一个结构化的文档所依赖的各种元素——章节、目录、列表、图表、交叉引用、脚注等等。目录03_\(\LaTeX{}\) 之文档元素章节和目录章节标题目录文档结构的划分标题页交叉引用脚注和边注特殊环境列表对齐环境引用环境摘要环境代码环境表格列格…

THREE.js学习笔记6——Geometries

这一小节学习THREE.js中的物理模型。 什么是geometry?(英文解释,翻译为中文就看不懂了,直接看英语吧)Composed of vertices (point coordinates in 3D spaces)and faces (triangles that join those vertices to create a surface) Can be used for meshes but also for par…

第三节 回归实战

数据处理超参:人为指定不能改变测试数据只有x没有标签y 训练数据拆分,82开,作训练集和验证集(验证模型好坏),模型训练不是一路上升的过程,训练几次验证一次,最好的模型save下来 one-hot独热编码 猪(1 0 0) 狗(0 1 0) 猫(0 0 1) def get_feature_importance(feature_data, label…

Windows git bash 文字显示/斜杠开头数字

前言全局说明Windows git bash 文字显示/斜杠开头数字一、说明 详细介绍:https://zhuanlan.zhihu.com/p/133706032二、问题三、解决方法 git config --global core.quotepath false免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源: h…

DDR 带宽的计算与监控

DDR 带宽(Double Data Rate Bandwidth)是指 DDR 内存在一秒内可以传输的数据量,通常以 GB/s(Gigabytes per second) 为单位。它是衡量内存系统性能的重要指标,直接影响系统的数据吞吐能力。 1.如何计算 DDR 带宽 计算 DDR 理论带宽的公式为: DDR主频 * 位宽 = 理论带宽其…

1.15

尽力了,之前的粗心导致现在要改很多以前的坑,明天再继续

中考英语优秀范文-热点话题-传统文化-006 Welcome to Chinese Summer Camp 欢迎参加中国夏令营

1 写作要求 假定你是李华,你校今年暑假将为外国学生举办一场汉语夏令营活动(Chinese Summer Camp)。请你根据下面海报的内容,用英语给你的笔友David写一封电子邮件,介绍本次活动并邀请他参加。词数80左右。 Welcome to Chinese Summer Camp Time:July 18th—July 28th, 2…

机器人

本文来自博客园,作者:Traktorea,转载请注明原文链接:https://www.cnblogs.com/kdsmyhome/p/18673586

使用Nginx实现前端映射到公网IP后端内网不映射公网.250115

一、场景: 系统移动端需要映射到公网,但是后端地址不能映射出去 qbpm.xxxx.cn 系统解析内网IP qmbpm.xxxx.cn 移动端解析公网IP 二、思路: 移动端前端公网端口放出80 443端口 移动端后端映射到内网后端地址qbpm.xxxx.cn:8443 三、解决方法: vim nginx.confserver {listen 8…

Qml 中实现任意角为圆角的矩形

在 Qml 中,矩形(Rectangle)是最常用的元素之一。 然而,标准的矩形元素仅允许设置统一的圆角半径。 在实际开发中,我们经常需要更灵活的圆角设置,例如只对某些角进行圆角处理,或者设置不同角的圆角半径。 本文将介绍如何通过自定义 Qml 元素实现一个任意角可为圆角的矩形…

【附源码】JAVA在线投票系统源码+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:在线投票系统源码 。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 系统测试截图系统视频演示https://githubs.xyz/show/340.mp4二. 系统概述【 系统…