c++ - 等待多个对象发出信号

标签 c++ qt signals-slots

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

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;
};

关于c++ - 等待多个对象发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789262/

相关文章:

qt - 在QT中设置新公共(public)信号后出现段故障

C++ 从二进制文件中读回 "incorrect"值?

c++ - 使用 FLTK 时 Stroustrup 的 header 错误

C++ 打破另一个函数的循环

c++ - 使用 Active Qt 将图片添加到 Word 后居中

c++ - 跨多个 QML 处理信号

events - 信号和槽 vs. 事件和事件监听器

c++ - ftell 非常大文件的错误

c++ - 如何做一个运行时子类化系统

c++ - qt 5.4/clang:体系结构 x86_64 的 undefined symbol (std::istream::gcount())