QT多线程

简介: qt多线程

1.继承 QThread

这个类中只有run方法运行在其他线程,和java中的Thread相似,同样start函数即启动线程重复调用start函数只会执行一次


但要注意一点和Java不同的是内存管理,Java会自动回收内存,不要手动delete对象


wait()子线程等待主线程结束才能继续执行,让其判断一个条件后自动停止线程

在new线程时,不指定父对象,通过绑定**void QObject::deleteLater () [slot]**槽让它自动释放。这样在widget析构时可以免去wait()这句。

connect(thread,&QThread::finished,thread,&QObject::deleteLater);
//线程结束后调用deleteLater来销毁分配的内存


2.继承QObject

写一个继承QObject的类,对需要进行复杂耗时逻辑的入口函数声明为槽函数


此类在旧线程new出来,不能给它设置任何父对象


同时声明一个QThread对象,在官方例子里,QThread并没有new出来,这样在析构时就需要调用QThread::wait(),如果是堆分配的话, 可以通过deleteLater来让线程自杀


把obj通过moveToThread方法转移到新线程中,此时object已经是在线程中了


把线程的finished信号和object的deleteLater槽连接,这个信号槽必须连接,否则会内存泄漏


正常连接其他信号和槽(在连接信号槽之前调用moveToThread,不需要处理connect的第五个参数,因为默认不在同一线程中就使用Qt::QueuedConnection,否则就显示声明用Qt::QueuedConnection来连接)


初始化完后调用QThread::start()来启动线程


在逻辑结束后,调用QThread::quit退出线程的事件循环

相关文章
|
6月前
|
算法 Unix 调度
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
507 0
|
6月前
|
安全 Java
Qt经典面试题:Qt开启线程的几种方式
Qt经典面试题:Qt开启线程的几种方式
110 0
|
6月前
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
88 0
|
6月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
1373 3
|
6月前
|
存储 安全 Java
Qt线程池+生产者消费者模型
Qt线程池+生产者消费者模型
254 5
|
2月前
|
网络协议 安全
QT多线程
本文详细介绍了在Qt中如何正确使用QThread以及信号槽跨线程的使用方式,包括线程的正确退出方法和QObject在不同线程中创建子对象时可能遇到的问题。同时,文章还提供了相关博客和资料的链接,用于进一步学习和参考。
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
140 1
|
2月前
自己动手写QT多线程demo
本文是作者关于如何编写Qt多线程demo的教程,介绍了如何实现多线程功能,包括可暂停和继续的功能。文章提供了部分示例代码,展示了如何创建线程类、启动和管理线程,以及线程间的通信。同时,还提供了相关参考资料和免费下载链接。
|
4月前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
153 6
|
6月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
243 1