简述
QThread类提供了一个与平台无关的管理线程的方法。一个QThread对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函数通过调用exec()函数来启动事件循环机制,并且在线程内部处理Qt的事件。在Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能及时响应用户的请求操作。
详细说明
GUI线程与工作线程
每个程序启动后拥有的第一个线程称为主线程,即GUI线程。QT中所有的组件类和几个相关的类只能工作在GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下的工作。
什么时候用到多线程?
以界面为例:所有的IO操作都要放到线程里面
- IO操作 QIODevice 文件IO 网络IO(套接字 eg:CAN linux下也是套接字) 串口等外设;因为不确定什么时候能读写完成
- 耗时的算法 eg: 文件压缩 信号处理
注意
线程里面尽量少用 while(1) + sleep(),尤其是while
eg:第一个例子如果用while(1),那么当线程exit(),并等待退出时wait()时不会退出线程,等待超时后会报错
源码:
.h文件
class Mythread