QT开发笔记(继承 QObject 的线程 )

继承 QObject 的线程

在第 10 章章节开头已经说过,继承 QThread 类是创建线程的一种方法,另一种就是继承

QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject

的类转移到一个线程里执行。恩,不理解的话,我们下面也画个图捋一下。QT开发笔记(继承 QObject 的线程 )_第1张图片
通过上面的图不难理解,首先我们写一个类继承 QObject,通过 QObject::moveToThread()

方法将它移到一个 QThread 线程里执行。那么可以通过主线程发送信号去调用 QThread 线程的
方法如上图的 fun4(),fun5()等等。这些方法都是在 QThread 线程里执行的。

应用实例 本例目的:快速了解继承 QObject类线程的使用。 例 06_qthread_example2,继承 QObject类的线程(难度:一般)。项目路径为Qt/2/06_qthread_example2。本例通过 QObject类继承线程,然后在 MainWindow类里使用。通过点击一个按钮开启线程。另一个按钮点击关闭线程。另外通过加锁的操作来安全的终止一个线程。(我们可以通过 QMutexLocker可以安全的使用 QMutex以免忘记解锁。) 在我们谈谈为什么需要加锁来终止一个线程?因为 quit()和 exit()方法都不会中途终止线程。要马上终止一个线程可以用 terminate()方法。但是这个函数存在非常不安全的因素,Qt官方文档说不推荐使用。 我们可以添加一个 bool变量,通过主线程修改这个 bool变量来终止,但是有可能引起访问冲突,所以需要加锁,例程里可能体现不是那么明确,当我们有 doWork1(),doWork2…就能体现到 bool变量加锁的作用了。但是加锁会消耗一定的性能,增加耗时。 下面的例子是仿照 Qt官方写的,看似简单,但是流程大家可能不是很明白,所以画个了大体的流程图,给大伙瞧瞧。
QT开发笔记(继承 QObject 的线程 )_第2张图片

你可能感兴趣的:(QT开发学习笔记,qt,开发语言)