Seite 1 von 1

Messages zwischen Threads verschicken

Verfasst: Donnerstag 6. Dezember 2012, 13:49
von WienerSchnitzel
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?

Re: Messages zwischen Threads verschicken

Verfasst: Mittwoch 9. Januar 2013, 07:26
von WienerSchnitzel
Hat niemand eine Idee?

Re: Messages zwischen Threads verschicken

Verfasst: Mittwoch 9. Januar 2013, 08:27
von 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".

Re: Messages zwischen Threads verschicken

Verfasst: Mittwoch 9. Januar 2013, 12:58
von WienerSchnitzel
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.

Re: Messages zwischen Threads verschicken

Verfasst: Mittwoch 9. Januar 2013, 13:18
von lunar
@ WienerSchnitzel Hast Du den Punkt mit „vollständigen und ausführbaren Quelltext zeigen“ übersehen?

Re: Messages zwischen Threads verschicken

Verfasst: Donnerstag 10. Januar 2013, 18:47
von WienerSchnitzel
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.