Threading Event-Problem
Verfasst: Sonntag 4. März 2012, 15:38
Hallo,
ich arbeite zum ersten Mal intensiv mit Threads und hab da so meine Probleme.
Genauer gesagt geht es um die Synchronisation der Threads mittels des Event-Objekts.
Hier mein Problem: Ich habe eine Hauptklasse für meine GUI und eine Klasse, die ich als Thread starten möchte, um da dann später Sounds mit pyaudio aufzunehmen.
Das Thread starten ist auch nicht sonderlich mein Problem, sondern mehr das Beenden. Also es funktioniert, aber ich verstehe nicht, wieso, die Lösung war mehr Try and error.
Hier grob mein Code:
Wenn ich das so aufrufe, dann geht alles. Allerdings will ich beim Klick auf den Stop-Button noch weitere Aktionen durchführen und wollte deshalb die Methode GUIFrame.stop() als command-Objekt nutzen, nur dann kriege ich die Schleife nicht pausiert und das ist genau meine Frage: Warum funktioniert das nicht?
Bin für jede Hilfe dankbar und hoffe, das alles detailliert genug geschildert ist...
ich arbeite zum ersten Mal intensiv mit Threads und hab da so meine Probleme.
Genauer gesagt geht es um die Synchronisation der Threads mittels des Event-Objekts.
Hier mein Problem: Ich habe eine Hauptklasse für meine GUI und eine Klasse, die ich als Thread starten möchte, um da dann später Sounds mit pyaudio aufzunehmen.
Das Thread starten ist auch nicht sonderlich mein Problem, sondern mehr das Beenden. Also es funktioniert, aber ich verstehe nicht, wieso, die Lösung war mehr Try and error.
Hier grob mein Code:
Code: Alles auswählen
class GUIFrame(Frame):
def record(self):
self.rec.startRec()
def stop(self):
self.rec.stopRec()
def createWidgets(self):
self.start = Button(self)
self.start["text"] = "Start"
self.start["command"] = self.record
self.start.grid(row=0, column=0)
self.stop = Button(self)
self.stop["text"] = "Stopp"
self.stop["command"] = self.rec.stopRec
self.stop.grid(row=0, column=1)
def __init__(self, master=None):
Frame.__init__(self, master)
self.rec = Recorder()
self.rec.start()
self.pack()
self.createWidgets()
BitRate16 = pyaudio.paInt16
class Recorder(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.audio = pyaudio.PyAudio()
self.recEvent = threading.Event()
self.recording = False
def startRec(self):
self.recEvent.set()
def stopRec(self):
print "stop"
self.recEvent.clear()
def record(self, chunkSize, format, rate):
while True:
self.recEvent.wait()
print "aufnehmen..."
def run(self):
self.recording = True
self.record(1024, BitRate16, 44100)
Bin für jede Hilfe dankbar und hoffe, das alles detailliert genug geschildert ist...