On Tue, 5 Sep 2000, Carlos Toledo wrote:
Hi!
I don't understand the reason why are you doing it (the creating new
process). If is it possible, you should avoid multithreading in a gtk
program. If you really need it, it should be enough to use threads in the
gtk program (see gtk faq).
In this case, I think, that you should call the gtk_exit() in
the last existing process, not in the newly created process - I'd rather
finish it in regular way. (exit()). When you call gtk_exit(), it should
deallocate all the resources used by gtk, and probably also close
connections between the gtk program and X server. That is probably the
reason for 'broken pipe', when the original process then wants to display
something ...
Jim
> Hello, I have a problem with this code, when I create a child process
> using gtk the program always dies with a broken pipe.
> Here is the !#"!$% code:
>
> #include <gtk/gtk.h>
> #include <stdio.h>
>
>
> void sistema (GtkWidget *widget, gpointer *data)
> {
> int pid, index, w, estado, i=10;
>
> pid = fork ();
>
> switch (pid)
> {
> case 0:
> /* --- Codigo del hijo --- */
> for (index = 0; index < i ; index ++)
> {
> printf ("%d\n", index);
> }
> gtk_exit (0);
> break;
>
> default:
>
> while ( (w = wait (&estado) ) != pid && pid != -1);
> printf ("Proceso padre terminado.\007\n");
> break;
> }
>
> }
>
> int main ( int argc, char *argv[])
> {
> GtkWidget *window;
> GtkWidget *boton;
>
> gtk_init (&argc, &argv);
>
> /* --- Creamos la ventana principal --- */
> window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> gtk_container_set_border_width(GTK_CONTAINER (window), 10);
> gtk_window_set_title (GTK_WINDOW (window), "Prueba proceso hijo");
> gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC
>(gtk_main_quit), NULL);
> gtk_widget_set_usize (window, 200, 200);
> /* --- Creamos el boton --- */
> boton = gtk_button_new_with_label ("Proceso hijo");
> gtk_container_add (GTK_CONTAINER (window), boton);
> gtk_signal_connect (GTK_OBJECT (boton), "clicked", GTK_SIGNAL_FUNC (sistema),
>NULL);
> gtk_widget_show (boton);
> gtk_widget_show (window);
> gtk_main ();
> return 0;
> }
>
> Can someone tell me why the program fails?
>
>
> thanks in advance.
> Carlos
>
>
>
>
> _______________________________________________
> gtk-list mailing list
> [EMAIL PROTECTED]
> http://mail.gnome.org/mailman/listinfo/gtk-list
>
_______________________________________________
gtk-list mailing list
[EMAIL PROTECTED]
http://mail.gnome.org/mailman/listinfo/gtk-list