C Programm mit gtk und Sockets hängt sich auf.
-
Moin,
ich war mir jetzt nicht sicher, wohin ich das schreiben soll, da ich das genaue Problem nicht gefunden habe, also stell ichs hier rein.
Das Programm soll sich zu einem Server:Port verbinden und dann alles was man sendet, ausgeben und alles was ich schreibe senden.
Hier das Programm:
http://nopaste.info/380a56d17c.htmlIch compile das Programm mit:
gcc window.c -Wall -g -o window `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`Wenn ich mich jetzt ins leere Verbinde, als 127.0.0.1:80 (wo nichts läuft) bringt mir das Programm Verbindung fehlgeschlagen. Verbinde ich mich mit meinem Router, hängt sich das Programm auf. Manchmal kann ich vor dem aufhängen noch was senden. Am Router liegt es nicht, das selbe passiert, wenn ich mich zu einem IRC Server oder einem Webserver verbinde.
Ich hoffe jemand blickt in meinem Codemüll durch und kann mir helfen.
Bin noch ein Anfänger was C angeht.Beim compilen bekomm ich:
window.c: In function ‘add_text’: window.c:59: warning: implicit declaration of function ‘gtk_text_backward_delete’ window.c:59: warning: implicit declaration of function ‘gtk_text_get_length’ window.c:60: warning: implicit declaration of function ‘gtk_text_forward_delete’ window.c:64: warning: implicit declaration of function ‘gtk_text_insert’ window.c: In function ‘main’: window.c:231: warning: implicit declaration of function ‘gtk_text_new’ window.c:231: warning: assignment makes pointer from integer without a cast window.c:233: warning: implicit declaration of function ‘gtk_text_set_editable’ window.c:234: warning: implicit declaration of function ‘gtk_text_set_word_wrap’
Edit: Ok, hab den Fehler gefunden.
Und zwar das ich aus dem anderen Thread die GUI verändere.
Hat jemand eine Idee, wie ich das Problem "umgehen" kann?
-
Siehe http://live.gnome.org/gtkmm/FAQ unter "Is gtkmm thread-safe?". Die Antwort ist zwar fuer gtkmm gedacht, trifft aber auch fuer GTK+ zu.
-
Ok, danke !
Habs hinbekommen
Arbeite jetzt mit nem Thread der in nem struct nen *char, int und mutex speichert und dann nen Signal sendet.
Über google hab ich keine Möglichkeit gefunden den Hauptthread über eine Funktion zu bekommen, also sende ich das Signal mit kill(getpid(), signal) das zum Lesen der Daten führt. Ist das so üblich oder gibt es da besser Methoden?
-
Tut mir leid, ich hab so gut wie keine Erfahrung mit GTK+
-
Ich meinte das mit den Signalen ^^
Ich hab mittlerweile noch 2 Probleme, zu denen ich im Internet nichts (brauchbares) gefunden habe, was geholfen hat.
1. Wenn ich aus einem GTK_ENTRY mir den Text hole und über einen Socket sende, kommt alles richtig an, auch äöüß, wenn ich allerdings das ganze in den GTK_TEXT einfüge, dann kommen ganz komische Zeichen. Hab auch schon probiert mit wchar_t zu arbeiten, hat alles nichts gebracht.
2. Mein GTK_TEXT hat eine Scrollbar von mir bekommen, allerdings kann ich mit dem Scrollrad nur scrollen, wenn die Maus über dem Scrollbalken ist und nicht wenn sie im GTK_TEXT ist
Hoffe jemand hatte solche Probleme schon und kann mir auskunft geben