2016-03-26 12 views
1

Ich habe ein einfaches QObject:Was passiert in Qt mit einem Objekt, wenn ein Thread fertig ist?

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

Eine Instanz Engine* engine innerhalb des Hauptfensters Klasse gespeichert wird. Wenn eine Taste gedrückt wird, geschieht Folgendes:

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(); 

Meine Frage ist, was nach thread Oberflächen zu engine passiert? Kann ich einen anderen Thread erstellen und engine in diesen Thread verschieben und alles noch einmal wiederholen?

Antwort

1

Was passiert mit dem Motor nach dem Ende des Gewindes?

Was mit dem Objekt passiert, ist unabhängig davon, dass es in einen Thread verschoben wird. Wenn Sie "bewegen", machen Sie keinen wirklichen Zug, Sie sagen nur, dass Sie etwas Code in einem Thread ausführen. Das Objekt wird wie üblich zerstört (außerhalb des Gültigkeitsbereichs oder für den zugewiesenen Heap löschen).

Kann ich einen anderen Thread erstellen und die Engine zu diesem Thread verschieben, und alles noch einmal wiederholen?

Ja, solange das Objekt noch existiert.

+1

Beachten Sie, dass die Verbindungen zum vorherigen Thread immer noch vorhanden sind, es sei denn, Sie löschen den Thread oder trennen die Verbindung manuell. –

+0

Wenn ich 'Engine' in einen anderen Thread verschiebe, gibt es (wieder) einen Fehler, der besagt" Kann nicht zum Ziel-Thread wechseln ". Sollte ich 'Engine' irgendwie vom vorherigen Thread trennen? –