Seite 1 von 1
Thread stoppen?
Verfasst: Mittwoch 6. Juni 2007, 13:32
von blubber
Hi,
ich starte aus einer GUI Klasse einen Thread mit "test.start()". Nun möchte ich in der GUI Klasse diesen gestarteten Thread wieder beenden, wie mach ich das?
HIntergrund, es handelt sich um Testfälle, wenn ich einen Testfall starte, geht alles, wenn ich anschliessend noch einen starte, dann bekomm ich die Fehlermeldung "thread already started".
Gruß
Verfasst: Mittwoch 6. Juni 2007, 13:42
von BlackJack
Threads kann man von aussen nicht stoppen, der Thread muss sich schon selbst beenden.
Aber selbst dann kann man ihn nicht neu starten ─ einen Thread kann man immer nur *einmal* starten. Für einen neuen Testfall musst Du einen neuen Thread erstellen.
Verfasst: Mittwoch 6. Juni 2007, 14:08
von blubber
hm, hab da irgendwie noch meine Schwierigkeiten.
Also wenn ich auf den Startknopf drück, dann komm ich ja in eine Funktion rein und diese startet den Thread. Aber ich komm ja immer in diese Funktion rein wenn ich den Startknop drücke, wie sag ich dem dann, dass ich den Thread nur einmal starten will?
Verfasst: Mittwoch 6. Juni 2007, 14:28
von BlackJack
Na in dem Du in dieser Funktion, die mit dem Knopf verbunden ist, eben nicht ein *vorhandenes* Thread-Objekt startest. Du müsstest es dort erstellen und starten. Dann wird ja immer ein neues Objekt gestartet.
Verfasst: Freitag 8. Juni 2007, 08:27
von HarryPython
Hi blubber
Also hier ist meine Lösung um mit einem Stop Button einen Thread zu beenden.
Code: Alles auswählen
import threading
class Can_Stress_Timer(threading.Thread):
def __init__(self, tree, Button_1_Label):
self.tree_items=tree
self.Button_1_Label=Button_1_Label
threading.Thread.__init__(self)
self.stopped = threading.Event()
def stop(self):
self.stopped.set()
def run(self):
while not self.stopped.isSet():
#Hier läuft die Abarbeitung von meinem Programm
Bei betätigen des Buttons, der bei mir in einer anderen Klasse steht, starte ich die Funktion run(). Durch erneutes drücken wird die Funktion stop() ausgeführt was zur Folge hat das beim nächsten Schleifendurchlauf der Funktion run(), mein Programm beendet. Betätige ich erneut den Button läuft mein Programm wieder los.
Hoffe ich hab das Richtig verstanden und konnte dir helfen.
Gruß HarryPython
Verfasst: Freitag 8. Juni 2007, 08:51
von gerold
HarryPython hat geschrieben:Bei betätigen des Buttons, der bei mir in einer anderen Klasse steht, starte ich die Funktion run(). Durch erneutes drücken wird die Funktion stop() ausgeführt was zur Folge hat das beim nächsten Schleifendurchlauf der Funktion run(), mein Programm beendet. Betätige ich erneut den Button läuft mein Programm wieder los.
Hallo HarryPython!
Nicht ganz.
1.) Die Methode ``run()`` darf nicht direkt aufgerufen werden. Nur der Aufruf von ``start()`` startet ``run()`` als Thread.
2.) Ein Thread kann/darf nicht mehrmals hintereinander gestartet werden. Für jeden Thread muss eine neue Instanz der Klasse erstellt werden.
Aber das mit dem Stoppen über ein Event ist komplett richtig.
mfg
Gerold
