Messages zwischen Threads verschicken

Plattformunabhängige GUIs mit wxWidgets.
Antworten
WienerSchnitzel
User
Beiträge: 10
Registriert: Freitag 23. November 2012, 18:41

Hallo,

ich würde gerne einen Thread laufen lassen, der zwischendurch Nachrichten an die GUI schickt, z.B. um Statusmeldungen ausuigeben. Ich versuchte folgendes:

Code: Alles auswählen


class subwindow_EEX_prices (subwindow):
        def __init__  (self, window, ArgReader):
                ...
                Publisher().subscribe (self.update_statustext, "status_message")
                self._all_threads = []
        ...
        def update_statustext (self, text):
                self._statustext = text.data
                self._label_statustext.SetLabel (self._statustext)
                self.Layout ()

        def pushedbutton_update (self, event):
                t = thread_update_eex ()
                self._all_threads += [t]
                t.start ()

class thread_update_eex (threading.Thread):
    def __init__ (self):
        threading.Thread.__init__ (self)
    def run (self):
        Publisher().sendMessage (("status_message"), "Hello World!")
Hier ist self._label_statustext ein Label, welches die Nachrichten des Threads anzeigen soll. Versuche ich das, erhalte ich einen Speicherzugriffsfehler. Der Fehler tritt dann auf, wenn das Label geändert werden soll. Ich habe auch schon versucht, den bereich zu locken, allerdings erfolgslos.
Habt ihr eine Idee, wie man das lösen könnte?
Zuletzt geändert von Anonymous am Donnerstag 6. Dezember 2012, 21:48, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
WienerSchnitzel
User
Beiträge: 10
Registriert: Freitag 23. November 2012, 18:41

Hat niemand eine Idee?
lunar

@WienerSchnitzel Niemand wird sich die Mühe machen, zu raten. Zeige vollständigen und ausführbaren Quelltext ohne irgendwelche Auslassungszeichen, insbesondere einschließlich der Definition von "Publisher".
WienerSchnitzel
User
Beiträge: 10
Registriert: Freitag 23. November 2012, 18:41

Hallo,

danke für deine Antwort. Publisher ist ein Objekt aus wx.lib.pubsub. Das ist ja gerade der Knackpunkt, mir ging es hauptsächlich darum, ob ich Messages über den Publisher so nutzen kann und ob der Mainthread bspw. Labels ändern kann.
lunar

@ WienerSchnitzel Hast Du den Punkt mit „vollständigen und ausführbaren Quelltext zeigen“ übersehen?
WienerSchnitzel
User
Beiträge: 10
Registriert: Freitag 23. November 2012, 18:41

Nein, das habe ich nicht übersehen. Es würde nur nichts bringen, weil es klar sein sollte, was hier passiert, bzw. was gemacht werden soll. Wenn das Prinzip richtig erscheint, kannst du es ja sagen.

Habe nun herausgefunden, dass es scheinbar Probleme gibt, wenn der Publisher innerhalb kurzer Zeit Messages empfängt. Wenn der Thread jede Sekunde eine Nachricht schickt, dann klappt es wunderbar.

Ich schau mal, ob es bei python ein "mutex"-Pendant gibt.
Antworten