Pango? (Threads)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TiKaey
User
Beiträge: 84
Registriert: Montag 24. November 2008, 20:48

Sonntag 8. März 2009, 12:54

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?
Zuletzt geändert von TiKaey am Sonntag 8. März 2009, 18:25, insgesamt 1-mal geändert.
BlackJack

Sonntag 8. März 2009, 13:07

@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.
TiKaey
User
Beiträge: 84
Registriert: Montag 24. November 2008, 20:48

Sonntag 8. März 2009, 18:39

Okay.. nach stundenlangem Rumgefummel habe ich es nun glaube ich.
Danke :o)

Falls nicht, melde ich mich nochmal.
Antworten