事件队列和Qt中跨线程信号/槽使用的队列是同一个队列吗?

3
我想知道在Qt中,排队的事件和信号是否相同(它们不是从接收槽所在的线程发出的,因此被排队)。
所以,明确一下,我们有:
- 一个事件队列 - 一个信号队列(由于在不同的线程中发射/接收,不能直接执行) 还是只有一个事件和信号队列?

1
这个有帮助吗?https://dev59.com/zXRB5IYBdhLWcg3wZWbi - INS
1个回答

3

这里有一个单一的队列。invokeMethod() 会产生一个QEvent,它是一个“QMetaCallEvent”。它的事件索引为43,在这里可以看到:QEvent::MetaCall

http://doc.qt.io/qt-5/qevent.html#Type-enum

它被放入队列中,在 qmetaobject.cpp 中... 在“调用”触发对 QApplication 的 postEvent 调用。 这是该行的链接 在撰写时 在更新 损坏的gitorious链接

/src/corelib/kernel/qmetaobject.cpp 的第2228行

没有传递“优先级”参数,因此信号/槽调用始终为 Qt::NormalEventPriority

这些细节在文档中并没有被很好地契约化,因此我建议对未来各种平台和版本的行为不要过于假设。如果您需要一个严格的合同来规定程序某部分中事件处理的顺序,最好编写自己的显式协议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接