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();
}
輸出始終是:爲什麼qthread永不放棄?
˚F的QThread(0xbfdef1e0)真
˚F的QThread(0xbfdef1e0)真
˚F的QThread(0xbfdef1e0)真
我想知道爲什麼的QThread從未退出,因爲我使用「QMetaObject :: invokeMethod(thread(),」quit「,Qt :: QueuedConnection);」
感謝
a.f()在主線程中運行的不是子線程,子線程可以處理事件隊列。 – camino
我已經更新了答案以澄清 – Chris