2016-03-26 49 views
1

我有一個簡單QObject在Qt中,線程完成時對象會發生什麼?

class Engine : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Engine(QObject* parent = 0); 
signals: 
    void finished(); 
public slots: 
    void start(); 
}; 

實例Engine* engine存儲在主窗口類中。當按下一個按鈕,將出現以下情況:

QThread* thread = new QThread; 
engine->moveToThread(thread); 
connect(engine, SIGNAL(error(QString)), this, SLOT(errorString(QString))); 
connect(thread, SIGNAL(started()), engine, SLOT(start())); 
connect(engine, SIGNAL(finished()), thread, SLOT(quit())); 
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); 
thread->start(); 

我的問題是,經過thread結束會發生什麼engine?我可以創建另一個線程並將engine移動到該線程,並重復所有操作?

回答

1

線程完成後引擎會發生什麼?

該對象會發生什麼情況與它被移動到一個線程無關。當你「移動」時,你並沒有做出真正的舉動,你只是告訴在線程上執行一些代碼。該對象將像往常一樣被銷燬(超出範圍或刪除堆分配)。

我可以創建另一個線程並將引擎移動到該線程,並再次重複 的一切嗎?

是的,只要對象仍然存在。

+1

請注意,與上一個線程的連接仍然存在,除非您要麼銷燬線程,要麼手動斷開連接。 –

+0

當我將'Engine'移動到另一個線程時,(再次)出現「無法移動到目標線程」的錯誤。我應該以某種方式斷開前一個線程中的'Engine'嗎? –

相關問題