QT 线程的启动

QT 提供了线程对线程的支持,这包括一组与平台无关的线程类、一个线程安全的发送事件的方式以及跨线程的信号-槽的关联。

这些使得可以轻松的开发移植的多线程QT应用程序,可以充分的利用多处理器的电脑。

多线程编程也可以有效解决在不冻结一个应用程序界面的情况下执行一个耗时操作问题。

QT线程从Run()函数开始执行。默认可以调用exec()**开启 事件循环,并在线程内运行一个QT事件循环**。

要创建一个线程,需要子类化QThread,并且重新实现run函数

在外部创建该线程的实例,然后调用start()函数来执行该线程,start()默认调用run()函数,当从run函数返回后,线程便执行结束。

QThread会在开始、结束和终止时发射started()、 finished() 、terminated()信号 。也可以 使用isFinished() 、isRunning来查询 线程的状态。可以使用wait()来阻塞,直到线程结束执行。

每个线程都可以从操作系统获得自己的堆栈,操作系统会决定堆栈的默认大小,也可以使用setStackSize()来设置一个自定义的堆栈大小。

每一个线程都拥有自己的事件循环,可以通过调用exec()函数来启动事件循环,通过调用exit()或者quit()来停止事件循环

线程拥有自己的事件循环,使它能够关联其它线程的信号到本线程的槽上,这使用了队列关联机制,就是在使用connect()函数进行信号关联时,将QT::ConnectionType类型的参数指定为QTimer和QTcpSocket等。注意在线程中是无法使用任何界面部件类的。

在极端情况下,可能要终止一个正在执行的线程,这可以使用terminate()函数。但是线程是否会立即终止,依赖于操作系统的调度策略,可以在调用完后再调用QThread::wait()来同步终止。使用terminate()函数时,可能在任意时刻终止而无法进行一些清理工作。

静态函数currentThreadId()和currentThread()可以返回当前线程的标识(系统指定的Id),后者返回QThread指针。

QThread睡眠函数:**sleep()精度为秒,msleep()精度为毫秒。**usleep()精度为毫秒。

相关推荐
fengfuyao9858 小时前
基于对数似然比(LLR)的LDPC译码器的MATLAB实现
开发语言·matlab
Java后端的Ai之路9 小时前
【AI应用开发工程师】-分享Java 转 AI成功经验
java·开发语言·人工智能·ai·ai agent
IT猿手9 小时前
基于分解的多目标进化算法(MOEA/D)求解46个多目标函数及一个工程应用,包含四种评价指标,MATLAB代码
开发语言·算法·matlab
落羽的落羽9 小时前
【C++】深入浅出“图”——最短路径算法
java·服务器·开发语言·c++·人工智能·算法·机器学习
叙白冲冲9 小时前
Java中Arrays静态方法
java·开发语言
手握风云-9 小时前
JavaEE 进阶第十八期:MyBatis,查询请求的生命周期全景图(三)
java·开发语言·java-ee
.小小陈.9 小时前
Python基础语法详解4:函数、列表与元组全解析
开发语言·c++·python·学习
IT猿手9 小时前
多目标鲸鱼优化算法(MOWOA)求解46个多目标函数及一个工程应用,包含四种评价指标,MATLAB代码
开发语言·算法·matlab
wjs20249 小时前
Ruby 条件判断
开发语言
leo_2329 小时前
语言、开发语言&程序设计语言--SMP(软件制作平台)语言基础知识之六十一
开发语言·开发工具·企业信息化·smp(软件制作平台)·应用系统·eom(企业经营模型)