【发布时间】:2014-07-18 20:23:37
【问题描述】:
我正在浏览链接
我对一些陈述感到困惑。在第一个链接中,它说
QThread 中的所有函数都是编写并打算从创建线程调用,而不是从 QThread 启动的线程调用。
虽然它建议使用moveToThread 将对象移动到新线程,而不是继承QThread。我的问题是:
run 方法的默认实现调用exec,这会创建一个事件循环,并且当使用moveToThread 更改对象的线程亲和度 时,所有slots 将在新线程中执行,而不是在创建线程中执行,这与上述预期用途相矛盾。我错过了什么吗?
第二个问题:
在第三个链接中说
事件队列属于线程,而不是事件循环,它被运行在该线程中的所有事件循环共享。
我的问题是如何在一个线程中有多个事件循环?我的理解是,event-loop 循环通过 event-queue,直到调用 exit/terminate,并处理每个到达该队列的 event .如果这是真的,一个循环将永远不会结束(除非exit/terminate 被调用),另一个循环如何开始?任何演示它的示例代码都将受到高度赞赏。
【问题讨论】:
-
您错过了“如何真正、真正地使用 QThreads;完整说明”:mayaposch.wordpress.com/2011/11/01/…
-
@Merlin069,我研究过,但没有提及,与我的问题无关。
-
对不起,我当时没时间回答。
-
谁否决了这个问题,请解释原因。
-
建议将
QThread以外的对象移至线程。因此,除了run之外没有QThread方法在新线程中执行。
标签: c++ qt qthread qobject qeventloop