QT多线程及其与GUI组件的通信

每个程序启动后拥有的第一个线程称为主线程,即GUI线程。QT中所有的组件类和几个相关的类只能工作在GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下的工作。

每个线程都有自己的栈,因此每个线程都要自己的调用历史和本地变量。线程共享相同的地址空间。

QT线程创建方法

QThread使用方法1——重写run()函数

对于使用Qthread创建的进程而言,run()函数则是新线程的入口,run()函数退出,意味着线程的终止。

QThread使用方法2——moveToThread()

如果不想每执行一种任务就自定义一个新线程,那么可以自定义用于完成任务的类,并让它们继承自QObject。

然后使用moveToThread()将QObject对象实例移动到新线程。注意moveToThread()是QObject的公有函数。移动之后启动子线程。

多线程与GUI组件的通信

GUI系统的设计原则:所有界面组件的创建只能在GUI线程(主线程)中完成。子线程与界面组件的通信有两种方式:

  • 信号槽方式
  • 发送自定事件方式

参考链接

  1. 深入理解QT多线程编程,by 编程宝库.
  2. 零基础学 qt4 编程,by wd007.
  3. 多线程与界面组件的通信,by 程序员ITS401.
  4. QT从入门到入土(五(1))——多线程(QThread),by 唯有自己强大.