等待SLOT用Qt完成执行

时间:2017-02-01 16:41:21

标签: qt signals-slots

在我的代码中,我发出一个信号(mySignal),我想在继续之前等待连接槽(mySlot)的执行结束:

emit mySignal();
// Wait for the end of mySlot execution...

// Some code that has to be executed only after the end of mySlot execution...

有办法吗?

1 个答案:

答案 0 :(得分:6)

如果发件人和收件人在同一个帖子中使用Qt::DirectConnection,如果他们在2个不同的帖子中,则使用Qt::BlockingQueuedConnection

ClassA a;
ClassB b;
ClassC c;
c.moveToThread(aThread);
QObject::connect(&a, &ClassA::signal, &b, &ClassB::slot, Qt::DirectConnection);
QObject::connect(&a, &ClassA::signal, &c, &ClassC::slot, Qt::BlockingQueuedConnection);

请注意,如果符合以下条件,则必须断开/重新连接:

  • 发件人和收件人最终都是同一个帖子而他们之前没有,或者你将会死锁。
  • 发件人或收件人最终分成两个不同的主题,而他们以前在同一个主题中。

如果发送方和接收方位于同一线程中,则Qt::DirectConnection是默认值(请参阅Qt :: AutoConnection)。