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

9

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


我一直认为它们按照发射顺序执行,因为它们会作为事件添加到事件队列中,并具有相同的优先级(因为根据什么标准会修改优先级呢?)。然而,我找不到任何文档来确认这一点,也没有查看源代码... - cmannett85
2个回答

8

您发出的两个信号将在X线程的单一事件队列中排队,因此对应的槽函数将按照信号发出的顺序执行。

但在以下情况下,您不能依赖于槽函数的执行顺序:

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

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


5
根据当前QT源代码(5.*),它们将按照FIFO算法顺序被调度,即按照它们被发出的顺序。但是,在注释中指出,文档中没有指定这种顺序,因此我不建议依赖这种行为。

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