QT增加线程函数步骤流程

news2024/11/24 20:52:03

在使用线程的时候,不仅要关注线程开启的时机,同时还要关注线程安全退出,这样才能保证程序的健壮性,如果线程开启的较多,且开启关闭比较频繁,建议使用线程池来处理。开启线程有三种方式:第一种C++的开线程方式;第二种自定义一个继承自QObject的类,把要处理的事情放在这个类中实现,然后再new一个QThread指定,把这个类通过moveToThread移动到指定的线程中进行处理;第三种也就是我们这里重点分析的一种,自定义一个类,继承自QThread,然后重写run函数,把要处理的事项放在run函数中。

1,新建一个C++类,并继承自QThread

2,输入线程类的名称,并勾选图中所示内容,点击下一步,点击完成即可

 3,在添加的线程类中,.h文件中添加run函数,用于重写

4,在线程类的cpp文件中,在run()中添加要处理的逻辑业务

5,子线程只能处理数据,不能直接在子线程操作界面(否则会崩溃),如果想要操作界面,需要将子线程的数据传递给界面主线程进行操作,这样就用到了我们信号和槽,子线程和主线程之间传递参数。子线程和主线程之间传递数据: 

(1)首先,在主界面的头文件中,添加线程对象:

#include"usbthread.h"和usbThread myusbThread;

(2) 在主界面的cpp文件中,添加信号和槽连接(这里用到自定义信号),在子线程的头文件中定义你要传递的数据,这里使用的自定义结构体信号stru_usb_data,参数是结构体形式。

signals:void send_usbFlagSignal(stru_usb_data usb_data);

(3) 在界面主线程中的构造函数中开启线程,也可以根据自己的需要开启线程(比如,点击按钮时开启,或者接收到信号触发时开启,这个根据用户自己的需求来定);并且 在子线程的cpp文件中通过emit函数发送该信号

(4)  在子线程的cpp文件中通过emit函数发送该信号

(5) 在主界面cpp文件中连接信号和槽,用于接收子线程传递过来的数据,这里的信号是自定义的信号,参数是非基本类型,所以需要对信号进行注册。于是就实现了一个界面主线程,一个数据处理线程,子线程提供数据,通过信号和槽传递给界面主线程,界面主线程对接收到的数据进行处理。

6,线程运行完毕,需要安全退出(线程异常退出有可能导致崩溃),这里安全退出有两种方式,一种是标志位,一种是通过检查线程运行状态,通过quit,wait来实现,这里我们用第二种方式退出线程。

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

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

相关文章

房屋租赁系统|基于JSP技术+ Mysql+Java+ B/S结构的房屋租赁系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

Milvus 社区在线寻找「北辰使者」!!!

Milvus 社区的朋友们,大家好,欢迎来到 Milvus 北极星计划发布现场! 熟悉我们的朋友都知道,Milvus 起源于一种学名叫“赤鸢”的鸟类,鸟类飞行的方向判断依靠星星、太阳、磁场,而北极星在人类历史上长期被视为…

24考研数学史上最难!25该怎么学?

25考研的千万不要被以前的真题卷给蒙蔽了双眼,现在考研的和以前真的不一样了 做过24年考研数学试卷的,应该都有一个感受,平时训练的好像都没用上。这是为啥啊。 其实是因为,现在的考研数学更加注重基础的考察,并且计…

sqllab第二十八关通关笔记(附带28a)

知识点: union select 整体过滤 union all select 替换where id(输入)空格 过滤了,使用%09代替 经过不断的测试,发现原始语句为 where id(输入) 构造payload:id1)and%091(1 成功回显出了相关的信息 好,尝试进行错误注入 构造…

git 安装、创建仓库、常用命令、克隆下载、上传项目、删除分支 -- 一篇文章总结

一、git安装 1、git安装地址:https://git-scm.com/downloads 2、选择操作系统 3、安装自己系统对应的操作位数 4、等待下载完,一路next安装就可以了 5、安装完成后,在任意文件夹点击右键,看到下图说明安装成功 二、创建仓库 1…

集成电路:基本概念、工作原理与分类

随着科技的飞速发展,集成电路已经成为现代电子信息产业的基础。那么,什么是集成电路呢?本文将为您介绍集成电路的基本概念、工作原理以及分类等基础知识。 一、集成电路的基本概念 集成电路(Integrated Circuit,简称I…

Mysql数据库基本操作与简单管理

目录 一、MySQL数据库基本操作 1、SQL的分类 2、SQL语言的书写规范 3、数据库对象的命名 4、SQL的语句分类 5、查看帮助信息 6、查看,修改字符集 二、管理MySQL数据库 1、查看数据库的结构 1.1查看数据库 1.2查看数据库中的表 1.2.1方法一: …

excel 破解 保护工作簿及保护工作表

excel 破解 保护工作簿及保护工作表 对于这种 保护工作簿及保护工作表 不知道密码时,可以使用以下方法破解 保护工作簿破解 打开受保存的excel 右键点击sheet名称 —> 查看代码 复制以下代码,粘贴到代码区域 Sub 工作簿密码破解() ActiveWorkbook.…

题目 2086: 最长公共子序列

题目描述: 给定两个字符串,寻找这两个字串之间的最长公共子序列。 解题思路: 以二维数组的方式遍历两个字符串,行和列要加一,方便计算, 当遍历的两个字符相同时,就代表他两个字符串中都有这个字符, 就让…

先进的人工智能促进更好的业务沟通

提升商务沟通效率:了解SaneBox智能电子邮件管理工具 在现代商业环境中,有效的沟通至关重要。 先进的人工智能技术,特别是在电子邮件管理方面,正在改变企业处理沟通的方式,提高效率和个性化。 下面,我们深入…

算法学习(持续更新中)

学习视频:一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)_哔哩哔哩_bilibili 时间复杂度 一个操…

2024年云仓酒庄佛山发布会:赋能

原标题:2024年云仓酒庄佛山发布会圆满落幕,朱囿臻总赋能引领行业新篇章 近日,备受瞩目的云仓酒庄佛山发布会圆满落幕。此次发布会汇聚了业内精英、经销商代表以及媒体人士,共同见证了云仓酒庄在佛山市场的启航。在此,…

实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)

1、先看一效果: 2、实现思路: 使用定时器setTimeout和闭包实现常规防抖功能;增加immediate字段控制第一次是否执行一次函数(true or false);增加一个flag标识,在第一次执行时,将标…

YZ系列工具之YZ08:窗体加载图片后进行放大查看

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

【安全类书籍-2】Web渗透测试:使用Kali Linux

目录 内容简介 作用 下载地址 内容简介 书籍的主要内容是指导读者如何运用Kali Linux这一专业的渗透测试平台对Web应用程序进行全面的安全测试。作者们从攻击者的视角出发,详细阐述了渗透测试的基本概念和技术,以及如何配置Kali Linux以适应渗透测试需求。书中不仅教授读者…

软件工程-第9章 软件工程项目管理概述

9.1 软件工程管理活动 9.2 软件规模、成本和进度估算 9.3 能力成熟度模型CMM 9.4 ISO 9000系列标准简介 9.5 CMM与ISO 9000系列标准的比较 9.6 本章小结

Docker与containerd:容器技术的双璧

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker幻想曲:从零开始,征服容器宇宙》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Docker和containerd的背景…

【C++】堆区空间的申请和释放--- 2024.3.19

目录 C和C的区别(申请堆区空间)C中的new和delete结束语 C和C的区别(申请堆区空间) 在c语言中,在遇到需要申请一块堆区空间时,我们往往会使用malloc申请,使用free进行释放,但是为什么…

深入浅出前端本地储存

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

漏洞扫描服务为什么这么重要?

漏洞扫描服务作为网络安全领域的重要一环,发挥着不可或缺的作用。漏洞扫描服务不仅能够实时防护网络免受各类恶意攻击,还能为网络管理人员提供定期的安全自我检测与评估,确保网络的稳定与安全运行。那么什么是漏洞扫描呢? 漏洞是在…