Qt如何循环创建线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt如何循环创建线程相关的知识,希望对你有一定的参考价值。

我之前一直在用c,最近转到Qt,发现qt的多线程好难用,还要继承然后重写run,这样的话应该如何循环穿件线程呢,一次性开启n个线程怎么办呢

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

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

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

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

使用第二种方法的话,貌似会遇到这样的问题:如果在一个槽函数中把子线程阻塞,其他的槽函数无法接受来自主线程

Qt如何获取一个无限循环程序的不断更新的标

要开2个线程吧,一个后台运行程序,一个获取标准输出
还有readAllStandardOutput();可以在进程运行的时候同时读取
参考技术A 用线程打印,用发信号的方式把要打印的东西传出来就可以了。

以上是关于Qt如何循环创建线程的主要内容,如果未能解决你的问题,请参考以下文章

qt多线程的问题

在 qt 中创建另一个网络线程

QT中的线程与事件循环理解

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

Qt线程简单使用二:QObject~创建任务类

Qt多线程——方式2