c++ - Qt 排队连接中的槽调用顺序

标签 c++ multithreading qt qthread qt-signals

<分区>

假设我们有两个线程:Thread1 和 Thread2。

线程1有两个信号:signal1()和signal2()

Thread2 有两个槽:slot1() 和 slot2()

当我们像这样连接这些信号和插槽时:

connect(Thread1,SIGNAL(signal1()),Thread2,SLOT(slot1()));
connect(Thread1,SIGNAL(signal2()),Thread2,SLOT(slot2()));

然后在 Thread1 的某处一个接一个地发出信号,例如:

emit signal1();
emit signal2();

由于它们处于不同的排队连接中,slot1() 是否一定要在 slot2() 之前被调用?

最佳答案

今天按照相应信号的发射顺序执行。

在后台发生的事情是排队的连接将一个事件放入队列并且该事件将得到处理。该队列基本上是当前实现的 FIFO(先进先出)。

如果您想自己检查实现,您可以在此处找到一些详细信息:

void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority)

class QPostEventList : public QVector

但是,我个人建议不要依赖这种内部行为,因为它没有记录在案,因此可能会在没有任何通知的情况下进行进一步更改。

因此,在我看来,如果您需要以某种方式依赖另一个软件,则更具前瞻性的方法是在您的软件中进行显式依赖管理。这通常不是问题,甚至可以使代码更明确,从而更全面。

关于c++ - Qt 排队连接中的槽调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332700/

相关文章:

C++ 分解然后重构 std::function

java - Android线程池管理多个蓝牙处理线程?

c++ - 在 C++ 中保存 QML 图像

c++ - Qt:12.625 舍入 2 返回 12.62

multithreading - 暂停QThread

c++ - Qt grabWindow 坐标从 GetCursorPos 和 GetWindowRect 转移

c++ - Qt - 创建主窗口之前的非模态对话框

c++ - 为 mystring 类重载数组运算符

multithreading - C++11 - 管理工作线程

c++ - 多线程建议