Seite 1 von 1

Aufruf von QThread.exec() zwingend erforderlich?

Verfasst: 31. Juli 2007 09:59
von Deever
Hey Amigos, wie geht's?

Ich brauche einen QThread, der in einem try-Block Aktionen ausführt und in der catch-Clause ein selbstdefiniertes Signal emittet, das der Thread schiefgelaufen ist, also:

Code: Alles auswählen

void MyThread::run()
{
	try {
		do_something();
		do_something_other();
	} catch (MyException &e) {
		emit threadFailed(e->num);
	}
	// exec() hier noetig?
}
Die Funktionen in der try-Clause enthalten keinerlei Qt-Code, ist der Aufruf von exec trotzdem nötig?

Vielen Dank für eure Antworten!
Gruß,
/dev

Verfasst: 31. Juli 2007 10:09
von Christian81
Das hatten wir schonmal irgendwo.
http://doc.trolltech.com/4.3/qt.html#Co ... nType-enum

Es ist eine queued Connection, also die event-loop des Threads nötig.

Verfasst: 31. Juli 2007 10:50
von Deever
Vielen Dank für deine rasche Antwort!
Christian81 hat geschrieben:Es ist eine queued Connection, also die event-loop des Threads nötig.
Das heißt also, ich muß exec aufrufen? Ich will nur Signale von diesem Thread an Slots in anderen Threads binden, in der Doku zu QThread steht aber nur
Qt Dokumentation zu QThread hat geschrieben:"Having an event loop in a thread makes it possible to connect signals from other threads to slots in this threads"
, was genau der umgekehrten Richtung entspricht. Und in meinen Thread benutze ich wie gesagt keine Qt Objekte.

Gruß,
/dev

Verfasst: 31. Juli 2007 11:01
von Christian81
Probieren kannst du es, aber ich beziehe mich eben auf
Qt::QueuedConnection 2 When emitted, the signal is queued until the event loop is able to deliver it to the slot.

Verfasst: 31. Juli 2007 11:38
von Zandru
Nur der Empfänger des Signals braucht eine Eventloop, das emit geht auch ohne.

Gruß,
Zandru