等待几个物体发出信号

时间:2013-11-05 12:41:02

标签: c++ qt signals-slots

我知道如何使用

等待单个对象完成
QEventLoop eventLoop;
connect(&obj, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();

但是现在我有几个对象需要并行运行,所以我需要等到所有对象都发送了finished()个信号。

这就像WaitForMultipleObjects WinApi函数的信号和插槽版本。

我应该怎么做呢?

1 个答案:

答案 0 :(得分:1)

我会将完成的信号连接到一个计算接收到的信号数的类,并在达到预期计数时发出quit()。

这样的事情:

class EmitIfCountReached : public QObject
{
Q_OBJECT
public:
   EmitIfCountReached( int expectedCount, QObject* parent =  nullptr) : m_expected(expectedCount), m_count(0), QObject(parent) {}
signals:
   void finished();

protected slots:
   void increment() {
      m_count++;
      if (m_count >= m_expected) {
         emit finished();
      }
   }

protected:
   int m_count;
   int m_expected;
};