Seite 1 von 1

Pango? (Threads)

Verfasst: Sonntag 8. März 2009, 12:54
von TiKaey
Hi,

ich bin mal wieder an meinem Player am Basteln, und komme soweit auch gut voran. Nun sollen halt einige Sachen zusätzlich rein, und ich bekomme im Editor (SPE) manchmal eine Meldung, die ich nun wirklich nicht verstehe.

Pango:ERROR:/build/buildd/pango1.0-1.22.2/pango/pango-layout.c:3742:pango_layout_check_lines: assertion failed: (!layout->log_attrs)

assertion heißt Aussage... ok.. die ist nicht in Ordnung... nun.. dieser Fehler kommt jedoch nicht immer, sondern nur manchmal, trotz gleichen Daten (Auswertung der Ausgabe vom mplayer).
Ebenso werden Daten nicht immer auf der GUI (wxPython) in den Labels aktualisiert. Mal ja, mal nein. Manchmal scheint die GUI auch nicht zu refreshen (Eingabefehler reagieren nicht), aber reagiert noch auf Events (Klicks auf Button).

Ich bin mir nicht sicher ob das alles zusammen hängt.
Zur Verdeutlichung hier mal der Teil Code:

Code: Alles auswählen

    def read(self):
        for line in iter(proc.stdout.readline, ""):
            if "Authentication failed." in line:
                self.labelstatus.Label = "Benutzerdaten stimmen nicht!"
            if "Starting playback" in line:
                self.labelstatus.Label = "Wiedergabe gestartet"
            if "Exiting... (Quit)" in line:
                self.labelstatus.Label = "Wiedergabe beendet"
            if "Exiting... (End of file)" in line:
                self.labelstatus.Label = "Ausgestiegen!"
            if "Artist" in line:
                artist = line # Wird spaeter noch weiterverarbeitet
                self.labelartist.Label = artist
            if not line:
                break
            print line
Das "print line" ist nur für mich, um in der Pseudokonsole den Output zu sehen.

Das ganze wird übrigens per

Code: Alles auswählen

        threading._start_new_thread(self.read, ())
gestartet.

Wie gesagt, oben genannter Fehler taucht nicht immer auf, obwohl es immer die gleichen Ausgaben sind.
Any ideas?

Verfasst: Sonntag 8. März 2009, 13:07
von BlackJack
@TiKaey: Du greifst also aus einem anderen Thread als dem, in dem die `wx`-Hauptschleife läuft, auf die GUI zu!? Das geht nicht gut, da können die lustigsten Sachen, bis hin zu harten Programmabstürzen passieren. Und zwar nicht-deterministisch, wie Du ja schon bemerkt hast.

Das ``if not line`` in Zeile 15 ist überflüssig, die Bedingung kann nie eintreten.

Und zum Starten eines Threads sollte man nur die offizielle API aus `threading` benutzen. `threading.Thread()` kennt ein `target`-Argument.

Verfasst: Sonntag 8. März 2009, 18:39
von TiKaey
Okay.. nach stundenlangem Rumgefummel habe ich es nun glaube ich.
Danke :o)

Falls nicht, melde ich mich nochmal.