gtk und fork - text lässt sich nicht setzen

C

ccm

Grünschnabel
hallo zusammen!

ich hab hier einkleines problem in c mit gtk und fork. das auskommentierte gtk_entry_set_text geht, und das im child-prozess nicht!
hier nun das programm:

main(...
GtkWidget *win;
GtkWidget *txtbox;
..........
txtbox = lookup_widget (GTK_WIDGET (win), "entry1");
//gtk_entry_set_text (txtbox, "hier gehts!");

if (!fork()) { //child
gtk_entry_set_text (txtbox, "und hier nichtmehr!!!");
exit(0);
}

//hier unten kommt erst:
gtk_main (); //also das ist im parent..

fehler gibts keinen. muss ich dann da irgendwie aktualisieren? hat jemand ne idee? ich greif ja im child auf den gleichen speicher zu, oder? (wenn ich die id "txtbox" mit printf ausgeben lasse kommt auch die gleiche raus im child raus!)

danke schon mal für antworten!
 
Hallo,
Gtk+ ist nicht "thread-safe", was heißt, dass du nicht von mehreren Prozessen Gtk+ Aufrufe machen kannst.
In Gtk# verwendet man für solche Fälle 'Gtk.ThreadNotify'. Was ähnliches muß es auch in der C API geben, schau einfach mal in der Doku nach oder frag mal google.

Mehr kann ich dir leider nicht sagen, da ich schon länger nichts mehr mit Gtk+ in C gemacht habe.

EDIT: Vielleicht hilft dir das weiter: http://developer.gnome.org/doc/API/2.0/gdk/gdk-Threads.html
 
Zuletzt bearbeitet:
danke für die antwort!
der clou war anscheinend, den neuen thread so zu generieren:

if (!g_thread_create(thready, win, FALSE, &error)) //generiere thread aus fkt: thready ;)
{
g_printerr ("Failed to create YES thread: %s\n", error->message);
exit(0) ;
}

und zusätlich
g_thread_init(NULL);
gdk_threads_init ();
gtk_init (&argc, &argv);
.....
gdk_threads_enter();
gtk_main ();
gdk_threads_leave ();

und im thread "thready" selbst auch
gdk_threads_enter();
gdk_threads_leave ();

zu verwenden! nur wenn's jemanden interessiert (suchfunktion ;) )
 
Zurück
Oben