Seite 1 von 1

QThread-> finished()-Signal wird erzeugt, terminated() ni

Verfasst: 20. Januar 2007 14:58
von M@g!ndo$ch
Hi,

ich hab folgendes Problem.

Ich hab ne Gui mit der ich mit einem Button eine Instanz einer von QThread abgeleiteten Klasse erzeuge und den Thread starte.
Daraufhin wird der Btn disabled und soll, wenn der Thread fertig ist wieder enabled werden.

Hab also in meiner MainWindow-Klasse nen Slot threadTerminatedSlot() erzeugt

Code: Alles auswählen

void MainWindow::threadTerminatedSlot()
{
	startBtn->setEnabled(true);
	QMainWindow::statusBar()->showMessage("Ready",0);
}
und diesen mit den Signalen terminated() und finished() des QThreads verbunden

Code: Alles auswählen

m_bConnectRetValue = connect(thread,SIGNAL(terminated()),this,SLOT(threadTerminatedSlot()));
	m_bConnectRetValue = connect(thread,SIGNAL(finished()),this,SLOT(threadTerminatedSlot()));
Wenn der Thread ganz normal seine run()-Methode durchläuft funktioniert auch alles wunderbar. Wenn wärend der Ausführung des Threads (führt Berechnungen) durch ein Fehler auftritt, ruft dieser dann selber terminate() auf. Laut Doku sollte dann ja das Signal terminated() erzeugt werden.
void QThread::terminated () [signal]

This signal is emitted when the thread is terminated.
Aber leider passiert das anscheinend nicht. Wenn ich debugge wird der threadTerminatedSlot() nicht aufgerufen....

Wenn ich den Thread aber von der Gui aus beende, also thread->terminate() aufrufe, lande ich im threadTerminatedSlot().

Was mach ich falsch???

Verfasst: 20. Januar 2007 17:01
von upsala
Eine andere Möglichkeit wäre es, am Ende des Threas deleteLater() aufzurufen und dann das destroyed(QObject *)-Signal abzufangen.

Verfasst: 22. Januar 2007 23:45
von M@g!ndo$ch
Thx für die Antwort. Werds mal ausprobieren....