class A:public QObject
{
Q_OBJECT
public slots:
void f() {
while(1) {
qDebug()<<"f"<<thread()<<thread()->isRunning();
sleep(1);
**QMetaObject::invokeMethod(thread(), "quit", Qt::QueuedConnection);**
}
}
public slots:
void g() { qDebug() << "g"; }
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QThread th;
A a;
a.moveToThread(&th);
th.start();
a.f();// running in main thread
return app.exec();
}
вывод всегда:
f QThread (0xbfdef1e0) true
f QThread (0xbfdef1e0) true
f QThread (0xbfdef1e0) true
Мне было интересно, почему qthread никогда не завершает работу, потому что я вызываю quit внутри цикла, используя "QMetaObject :: invokeMethod (thread ()," quit ", Qt :: QueuedConnection);"
Спасибо