再试 Qt5 使用 QThread

It’s easy when you know how.

线程是所有编程工作都会遇到的一个问题,在上一篇 《Qt5 使用 QThread 简单测试》 里参考了他人的代码,使用run()实现了一个简单的新线程。这是采用继承QThread,重写了 run()函数 ,线程结束会发出finished信号。

后来又找到了一种方法就是 moveToThread 到一个新线程,这是来自伯乐在线的一篇文章《Qt开发者关于QThread的咆哮——你们都用错了》,原文是《You’re doing it wrong…》并且给出了当时为什么要创建 moveToThread 的一篇博客《Threading without the headache》。

现在我们再来回顾一下作者的意见,大意就是这样的,采用继承的方式,是在原来的方法不能满足要求的情况下采用的。原始的QThread类是抽象类,必须继承。但是从Qt4.4 开始不再如此,因为QThread::run()已经有了一个默认实现。现在更简单的方法是建立一个 QThread 对象,并将一个没有父类对象的QObject对象使用moveToThread移动到此线程里,然后通过线程开始的信号started信号来调用QObject类的某个槽函数,结束线程则采用quit信号。

It’s easy when you know why

Leave a Reply

Your email address will not be published. Required fields are marked *