Threading und Events ohne Timer

Plattformunabhängige GUIs mit wxWidgets.
Antworten
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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]
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

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

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