PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Qt] QThread beenden



Boron
22-05-2004, 16:29
Hallo zusammen,

ich habe das Problem, dass ich in einem Programm zwei QThreads beenden möchte und das nicht so richtig klappt.

Zur Laufzeit zeigt mir "top" in der Konsole drei Einträge mit meinem Programmnamen: 1x Hauptprogramm und 2x die Threads, möchte ich behaupten.
Wenn ich beide Threads mit der Methode terminate() beende, zeigt mit "top" in der Konsole immer noch zwei Einträge mit dem Programmnamen an. Also wurde nur einer der beiden Threads beendet. Es müssenDas aber beide Threads weg!

Wie funktioniert das eigentlich mit den QThreads genau?
Sobald die run Methode returniert wird der Thread beendet, oder wie?
Kann ich daraufhin den thread wieder mit start() starten?

anda_skoa
22-05-2004, 17:56
terminate() würde ich eher vermeiden.

Bei praktisch allen Threadimplementationen ist es besser den Thread dazu zu veranlassen, run() zu verlassen.

Man kann dann sogar aufrufendn Thread auf das Ende des zu stoppenden Threads warten lassen.

Ein einmal beendeter Thread kann normalerweise nicht wieder gestartet werden.

Ist ja im Grunde auch überflüssig, denn entweder ich will ihn nur kurz pausieren oder eben beenden.

Ciao,
_

Boron
23-05-2004, 14:59
Ich habe jetzt jedem Thread noch ein Attribut verpasst, das dem Thread anzeigt, ob er die run() verlassen soll.
Dieses Attribut kann ich von ausserhalb des Threads setzen. Die run() prüft in ihrer Endlosschleife ob dieses "Flag" gesetzt ist und beendet ggf. die run().
So scheint es zu funktionieren.

Jetzt zeigt mir top zwar zur Laufzeit 4 Threads an, und nicht mehr 3 wie oben zu lesen ist, aber es werden definitiv 2 Threads beendet.
Wo denn der 4. Thread wieder herkommt, tststs?

Danke.