使用Qt :: QueuedConnection的信号执行顺序

时间:2013-04-24 09:18:39

标签: c++ qt

我有两个信号A和B从线程X中的对象一个接一个地发出,并且两个连接的插槽位于主线程中。连接是QueuedConnection(由于多线程连接)。我的问题是:在调用插槽时信号的顺序是否受到尊重,或者它们是否有可能以任意顺序执行?

2 个答案:

答案 0 :(得分:6)

您的两个信号都将在X线程的单个事件队列中排队,因此将按照发出信号的顺序执行相应的时隙。

但在以下情况中,您不能依赖插槽执行顺序:

signal A connected to a slot in X thread
signal B connected to a slot in Y thread

此外,还有Qt::BlockingQueuedConnection连接类型。如果使用它连接第一个信号,则当前线程将被阻塞,直到另一个线程中的相应插槽完成其工作。

答案 1 :(得分:5)

根据当前的QT源(5. *),它们将按顺序发送,它们是使用FIFO算法发出的。但正如评论中所述,文档中没有任何内容指定此顺序,因此我不建议继续该行为。