Seite 1 von 1

Threading und Events ohne Timer

Verfasst: Freitag 18. Mai 2007, 18:43
von wdsl
Hi,
ich habe hier jetzt schon öffters gelesen das man durch die Events den Timer weglassen könne. Das wäre natürlich ideal allerdings kann ich bis jetzt nicht herrausfinden wie das gehen soll.

Mein Beispiel:
Ich habe ein Hauptprogramm das im Moment einen Timer hat und einen Thread der für den Socket zuständig ist. Jetzt will ich vom Hauptprogramm natürlich immer senden können ohne das die GUI (wxPython) blockiert und ich will möglichst schnell auf Antworten reagieren. Ich verwende hierfür 2 Queue Objekte eine für rein eins für raus.

Also habe ich einen Timer der das ganze alle Sekunde (das genügt in unserem Beispiel) überprüft. So jetzt hätte ich gerne das ich vom Thread aus einen Impuls an die Gui schicken kann das sich was verändert hat. Also im Grunde einen Event. Aber so wie ich die Thread Events verstanden habe kann man die nur abfragen und bekommt nicht wirklich einen zurück, also habe ich ja nichts gewonnen da ich wieder einen Timer brauche der den abfrägt.

Oder bin ich einfach gerade verwirrt?

vielen Dank
wdsl

Verfasst: Freitag 18. Mai 2007, 18:56
von EyDu
Ich glaube du bist verwirrt ;-)

Du musst einen weiteren Thread laufen lassen, der das Abwarten auf den Event übernimmt, und sich dann bei der GUI meldet:

Code: Alles auswählen

import threading

event = threading.Event()

def gui_thread(...):
    while True:
        #so lange warten, bis ein Ereignis aufgetreten ist
        event.wait()
        
        #Hier dann die GUI benachrichtigen
        
        #Und das Ereignis zurücksetzen
        event.clear()
Der Thread der die Daten vom Thread empfängt muss dann nur noch den Event setzen. Wenn du aber eh Daten hin und her schieben willst, kannst du threading.Event auch durch Queue.Queue ersetzen.[/code]

Verfasst: Freitag 18. Mai 2007, 19:16
von wdsl
nur das ich das richtig verstanden habe.

an

Code: Alles auswählen

def gui_thread(...):
Übergebe ich dann das GUI objekt damit es dort bekannt ist mir ist gerade nicht klar wie ich die GUI benachrichtigen kann ohne das Objekt direkt zu kennen.

vielen Dank
wdsl

Re: Threading und Events ohne Timer

Verfasst: Freitag 18. Mai 2007, 20:16
von gerold
wdsl hat geschrieben:ich habe hier jetzt schon öffters gelesen das man durch die Events den Timer weglassen könne.
Hallo wdsl!

Vielleicht kannst du mit diesen Beispielen etwas anfangen:

- http://www.python-forum.de/post-68183.html
- http://www.python-forum.de/topic-10704.html

mfg
Gerold
:-)