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退出线程的事件循环

相关文章
|
1月前
|
安全 Java
Qt经典面试题:Qt开启线程的几种方式
Qt经典面试题:Qt开启线程的几种方式
22 0
|
1月前
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
23 0
|
1月前
|
存储 并行计算 安全
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析(二)
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析
61 0
|
1月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
118 3
|
1月前
|
Java 程序员 API
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
77 0
|
1月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
45 1
|
1月前
|
安全
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(三)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
22 0
|
1月前
|
存储 安全 程序员
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(二)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
45 0
|
1月前
|
安全 测试技术 C++
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(一)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
43 0
|
1月前
|
负载均衡 并行计算 安全
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析(三)
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析
46 0

热门文章

最新文章

推荐镜像

更多