我知道如何等待单个对象完成,使用
QEventLoop eventLoop;
connect(&obj, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
但是现在我有几个我想并行“运行”的对象,所以我需要等到他们都发送了他们的finished()
信号。
这就像 WaitForMultipleObjects WinApi 函数的信号槽版本。
我该怎么做呢?
我知道如何等待单个对象完成,使用
QEventLoop eventLoop;
connect(&obj, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
但是现在我有几个我想并行“运行”的对象,所以我需要等到他们都发送了他们的finished()
信号。
这就像 WaitForMultipleObjects WinApi 函数的信号槽版本。
我该怎么做呢?
我会将完成的信号连接到一个类,该类对接收到的信号进行计数,并在达到预期计数时发出 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;
};