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.
import threading
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.stopped = threading.Event()
def run(self):
while not self.stopped.isSet():
#Hier irgend etwas machen
....
def stop(self):
#Anhalten ausloesen
self.stopped.set()
das hat EyDu bei nem älteren Beitrag "Thread zerstören" geschrieben. ich versteh nicht ganz warum bei dem event ein self davor muss. dann würd mich noch interessieren wie man die funktion stop von einer anderen klasse aus aufrufen kann!? vllt kann jemand helfe?
dirty sanchez hat geschrieben:das hat EyDu bei nem älteren Beitrag "Thread zerstören" geschrieben. ich versteh nicht ganz warum bei dem event ein self davor muss. dann würd mich noch interessieren wie man die funktion stop von einer anderen klasse aus aufrufen kann!? vllt kann jemand helfe?
Ein Tutorial kann helfen, denn das ist, ganz ehrlich, OOP-Grundwissen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
dirty sanchez hat geschrieben:naja ein tutorial kann meine frage nicht beantworten. ich weiß auch dass ich die funktion stop in einer anderen klasse so aufrufen kann:[...]
Du hast völlig recht. Man ein Tutorial auch nicht ordentlich durcharbeitet, dann beantwortest es gar keine Fragen.
ja genau, klingt logisch. wie krieg ich hin dass run() die Abbruchbedingung dauernd prüft? liegt wohl daran dass es nicht prüfen kann während der thread schläft?
Wenn dein Thread blockiert, etwa durch ``sleep()`` oder auf IO wartend, dann kann es natürlich nicht geprüft werden. Also musst du schauen, dass der Thread-Code nicht blockiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
for videos in playliste:
self.abspielen(video)
sleep(video.dauer)
und diese schleife steht in der while-schleife die das flag abfragt um den thread zu beenden. nun ist die frage wie ich richtig auf das flag prüfen kann damit der thread jederzeit beendet werden kann?
ne bringt auch nix. krieg die while-schleife nicht von aussen beendet. ich krieg nur hin, dass der thread nachdem alle videos abgespielt sind beendet wird. aber während die videos laufen bzw der thread schläft kriegt er das event nicht mit!?
also irgendwie komme ich nicht weiter. danke leonidas für deine hilfe aber dein programm funktioniert nicht so wie es sollte. das sleep hat zur folge dass immer nur für die anzahl der sequenzen geschlafen wird und nicht für ihre dauer. das verschieben der while in dir for schleife versteh ich nicht wirklich weil ich ja dann immernoch das problem habe, dass ich nicht aus der while schleife rauskomme!?
def abspielen(self):
global stopflag
stopflag = False
start_new_thread(self.test,())
def beenden(self):
stopflag = True
def test(self):
for element in wiedergabeliste:
if stopflag:
print stopflag
break
else:
self.videoabspielen(element)
for i in range(element.dauer):
if stopflag:
print stopflag
break
else:
print i
sleep(1)
habs jetzt mal so probiert, klappt aber auch nicht. wie kann man den verdammten thread abbrechen?
Das kann so ja nicht funktionieren, weil ``stopflag`` in ``beenden`` einfach eine lokale Variable ist. Außerdem würde ich für so etwas eher ``threading.Event()`` nehmen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)