qt中通过重写run方法创建线程与通过movetothread方法有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt中通过重写run方法创建线程与通过movetothread方法有啥区别相关的知识,希望对你有一定的参考价值。

参考技术A 在Qt中使用多线程,目前就我使用过的有两种,一是子类化QThread,重写run函数,在run函数里实现自己的代码,这一部分代码通常是比较耗时,或者干脆直接阻塞的。比如一个while循环,设置一个标志,判断循环结束。
这样的例子在网上有很多,就不写了。

这样写的话,会有一些东西需要了解。
子类化QThread的方法,只有run函数里面的内容是执行在子线程里的,其他的部分,比如槽函数什么的还是在主线程里执行(假设是在主线程开启的该子线程)。

还有一种方法,是子类化QObject,新建一个线程,然后使用MoveToThread把这个类的对象移到新建的线程中,这种做法使得它所有的槽函数都是执行在新开辟的线程里面。

如果直接(QObject对象).abc()的话,这个成员函数是在主进程内执行,可能会出现"QObject::killTimer: timers
cannot be stopped from another thread"的运行错误。

使用第二种方法的话,貌似会遇到这样的问题:如果在一个槽函数中把子线程阻塞,其他的槽函数无法接受来自主线程
额信号。本回答被提问者和网友采纳

以上是关于qt中通过重写run方法创建线程与通过movetothread方法有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

qt 多线程

多线程--线程的创建与启动

JAVA 线程与线程池简单小结

并发编程专题-线程的创建方式

并发编程专题-线程的创建方式

QT多线程操作