Поток Qt не останавливается после вызова exit / quit

Я пытаюсь лучше понять сигналы и слоты Qt в сочетании с потоками. Итак, я попробовал это минимальное приложение:

foo.h:

#include <QObject>

class A : public QObject {
  Q_OBJECT

public:
  void doit();

signals:
  void x();
};

class B : public QObject {
  Q_OBJECT

public slots:
  void h();
};

foo.cpp:

#include "foo.h"

#include <QThread>
#include <QCoreApplication>

void B::h() {
  qDebug("[%d] B::h() here!", (int) QThread::currentThreadId());
  QCoreApplication::instance()->quit();
}

void A::doit() {
  qDebug("[%d] emitting...", (int) QThread::currentThreadId());
  emit x();
}

int main(int argc, char* argv[]) {
  QCoreApplication app(argc, argv);
  A a;
  B b;
  QObject::connect(&a, SIGNAL(x()), &b, SLOT(h()));
  QThread t;
  t.start();
  b.moveToThread(&t);
  a.doit();
  t.wait();
  return 0;
}

Все в порядке, только t.wait () в конце никогда не возвращается. Насколько я понимаю, вызов quit () должен остановить цикл событий, что означает, что exec () должен вернуться и, следовательно, должен быть run (), а выполнение потока должно остановиться. Я что-то упустил?

5
задан Elektito 20 February 2012 в 08:36
поделиться