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ß
Thread stoppen?
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.
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.
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?
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?
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.
-
- User
- Beiträge: 60
- Registriert: Freitag 8. Juni 2007, 07:39
Hi blubber
Also hier ist meine Lösung um mit einem Stop Button einen Thread zu beenden.
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
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
Hoffe ich hab das Richtig verstanden und konnte dir helfen.
Gruß HarryPython
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo HarryPython!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.
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
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.