Thread stoppen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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ß
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.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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?
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.
HarryPython
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.

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten