2016-03-26 12 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つのスレッドを作成し、そのスレッドにエンジンを移動して、もう一度 すべてを繰り返すことはできますか?

はい、オブジェクトがまだ存在する限りです。

+1

スレッドを破棄したり、手動で切断したりしない限り、前のスレッドへの接続はそこに残ることに注意してください。 –

+0

'Engine'を別のスレッドに移動すると、(再び)「対象のスレッドに移動できません」というエラーが表示されます。私は何らかの方法で前のスレッドから 'Engine'を外すべきでしょうか? –

関連する問題