Frage

Ich arbeite an einer Chat-Anwendung unter Verwendung von C und Unix-Low-Pegel-Buchsen. Ich habe bei der Herstellung der Konsolen-Version erfolgreich war, aber ich möchte eine GUI für die Anwendung machen. Ich möchte GTK für die GUI verwenden. mein Problem ist, wie man „synchronisieren“ die Fassung und die GUI. weil ich Anruf gtk_main () als letzte GTK-Anweisung und die Anwendung haben selbst eine Endlosschleife. Wie kann ich die GUI aktualisieren, wenn eine Nachricht eingeht?

War es hilfreich?

Lösung

Sie stehen vor dem Problem, dass Sie mehrere Event-Systeme auf einmal, sondern nur ein Thread haben. Gtk + kommt mit seinem eigenen Event-Handler, die schließlich zu einem select() läuft darauf hinaus, die auf Benutzereingaben oder andere gtk Ereignis aufwachen. Sie selbst wollen mit Ihrem eigenen Event-Handling behandeln Vernetzung, die typischerweise aus einem select() auf Ihrer Steckdose (n) oder mit den Steckdosen im Blockiermodus besteht.

Eine Lösung ist Ihre Ereignisse in der Ereignisschleife von Gtk + zu integrieren.

Sie können die Gtk + Uhr machen / Ihre Steckdosen select() und eine bestimmte Funktion aufrufen, wenn ihre Zustandsänderungen (Daten lesbar). Siehe Abschnitt „Erstellen neue Quelltypen“ auf http: //developer.gnome. org / glib / 2.30 / glib-The-Main-Ereignis Loop.html

Eine andere Lösung wäre Gtk + Netzwerkfunktionen zu verwenden.

Normalerweise wollen Sie nicht mit den Buchsen etwas so Besonderes zu tun, dass es mit Glib IO-Kanäle nicht leicht wrapable ist. Siehe http://developer.gnome.org/glib/2.30/glib-IO-Channels.html

Ein dritte Lösung ist einen zweiten Thread zu starten, die Ihr Netzwerk behandelt, z.B. mit POSIX-Threads oder Gtk + Threading-Funktionalität.

Vereinzeler GUI vom Arbeiter Teil Ihrer Anwendung ist in der Regel eine gute Idee. Doch für eine Chat-Anwendung, ist es wahrscheinlich gibt keinen Vorteil gegenüber den anderen Lösungen. Siehe http://developer.gnome.org/glib/2.30/glib-Threads.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top