GTK, X11, Multithreading und Bilddarstellung



  • Moin!
    Ich habe ein Problem mit der Darstellung eines Bildes:
    Ich programmiere unter Linux/GTK. Das Bild wird in ein Fenster der Klasse Gtk::Window gezeichnet, per Anweisung:

    m_window->draw_gray_image(...);
    

    wobei m_window von der Klasse Gtk::Window abgeleitet wurde.

    Wird diese Routine durch eine Funktion ausgeführt, die durch Gtk aufgerufen wird, also zum Beispiel über ein Gtk::Button::signal_clicked() - Signal, so funzt das einwandtfrei.

    Jedoch soll das Zeichnen des Bildes "von extern" ausgelöst werden. Dazu habe ich einen Thread (pthread_t) geschrieben, der überprüft, ob neue Daten vorliegen, und der dann ein entsprechendes Signal emittiert. Dieses Signal ist verbunden mit der Routine, die das Zeichnen des Bildes veranlässt.

    Beim Ausführen des Programms erhalte ich folgende Fehlermeldung:
    [quote]
    Xlib: unexpected async reply (sequence 0xa1)!
    [/quote]
    Google hat mir gesagt, dass der X-Server Probleme mit Multithreading hat, jedoch habe ich keine weiteren Informationen darüber gefunden!

    Da ich ein absoluter Neuling in Sachen Gtk bin, habe ich keine Ahnung, wie man das Zeichnen korrekter Weise macht. Gibt es zum Beispiel in Gtk die Möglichkeit, Bildschirmausgaben mit dem X-Server zu synchronisieren? Oder gibt es ein Äquivalent zur MFC-onPaint() Methode, die Fensterinhalte zeichnet?

    Letztere Möglichkeit wäre mir am sympatischten 🙂

    Ich bin für jede Hilfe dankbar!

    Mfg Boson



  • Hab gerade ne Lösung für mein Problem gefunden, also beantworte ich meine Frage mal selber:
    Bevor die entsprechende Zeichen-Routine aufgerufen wird, habe ich gdk_threads_enter() aufgerufen und danach gdk_threads_leave(). Und zu Beginn des Programms Thread-Unterstützung aktiviert per:

    g_thread_init(NULL);
    gdk_threads_init();
    

Anmelden zum Antworten