我知道如何使用
等待单个对象完成QEventLoop eventLoop;
connect(&obj, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
但是现在我有几个对象需要并行运行,所以我需要等到所有对象都发送了finished()
个信号。
这就像WaitForMultipleObjects WinApi函数的信号和插槽版本。
我应该怎么做呢?
答案 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;
};