1

我知道如何等待单个对象完成,使用

QEventLoop eventLoop;
connect(&obj, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();

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

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

我该怎么做呢?

4

1 回答 1

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;
};
于 2013-11-05T13:20:26.803 回答