继承于QObject类的多线程流程--小白学习心得

继承 于QObject多线程的使用,适合于小小白 ,本人刚入开发岗不到3个月,对自己的技术水平是很了解的,所以想通过多写文章,多积累的方式让自己迅速成长,文中若有,多谢各位指正,感激不尽。

背景:在 项目的病例管理中,需要对选中的病人信息进行 拷贝
+压缩后导入导出,如果拷贝+压缩 的信息量过大,那么主线程在执行该操作时,会造成 程序的假死状态,在这种情况下,需要进行多线程的操作 ,把拷贝 和压缩功能 放到子线程中,避免程序 进入假死状态。

工具:vs2017+Qt

多线程的继承方式有两种,分别是继承 于QObject和继承于QThread,区别就不多说了,可自查,主要说一下继承于QObject的多线程的流程。 在这里插入图片描述
在这里插入图片描述

首先,要先创建一个类,继承于QObject,.h文件 中用枚举值来标记导入导出功能 ,SetWorkerMethod()方法用来实现具体是导入还是导出的功能,槽函数为 线程函数,主要是用来实现拷贝+解压缩的功能,另外有一个信号函数,因为我在执行完函数后需要在主线程中显示一个执行完成的对话框。cpp中 没什么好说的,就是ThreadFunc()函数的实现。其他一些函数,主要是子线程在 进行动作时用来 获取主线程中的一些数据。

在主线程中的.h和.cpp才是关心的重点。
.h文件
在这里插入图片描述
在主线程的私有类中声明出了一个子线程类,同时还声明出了一个QThread类m_ImportExportWorkerThread。
.cpp文件
先说主线程构造函数和析构函数
在主线程类的构造函数中 ,new出刚刚的ImportExportWorker和ImportExportWorkerThread。

在这里插入图片描述
主线程类的析构函数中,需要安全的释放掉指针
在这里插入图片描述
在我的信号槽连接部分
在这里插入图片描述发送线程开始的信号,同时执行 槽函数,movetoThread(),则保证了ImportExportWorkerThread被加入到 线程中。

这保证了线程的构造和析构是有效的安全的,
在我的OnImportButtonClicked()函数中,这个函数主要是用来进行导入操作的,在我点击了改按钮后,会执行以下操作
在这里插入图片描述
354行是子线程类中设置导入导出功能的方法,这里是eImportPatient,表示我将进行 导入病人数据的操作,那么在子线程中的函数中我就会调用导入操作,355和356行则表示子线程获取获取主线程中的数据,来进行自身的一系列操作,357行代表子线程开始执行,注意是ImportExportWorkerThread这个对象调用了start()这个方法。

之前我自己定义了一个信号,用来在子线程结束之后发送一个完成的信号,那我就可以在这个信号所对应的槽函数中,执行如下操作,来终止子线程。
在这里插入图片描述导出的子线程工作 基本相同,主要是对子线程的流程结合自身的工作进行描述和总结,是一些结构性的知识。具体的多线程,有很多大佬写了,可以自己查阅。

第一次写文章,有很多不足,主要也是想给自己一个总结,不能做完之后就放在那里,只知道我曾经做过,但是怎么做的,讲不清了。路还很长,想要变得优秀,就要多积累多学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值