阅读:1093回复:0
子进程的问题,苦恼!
在linux下,子进程是不能处理Xwindows的,现在由于程序设计需要,非得要在子进程里
画一个对话框,可是就是在显示对话框的时候,进程阻塞。连对话框都没有办法显示。 对话框的代码如下:gint Message(gchar* tile,gchar *text,gint type) { GtkWidget * window; GtkWidget* vbox,*hbox; GtkWidget *tempId,*text_tempId,*separator_tempId,*button_tempId,*ok_button,*no_button; rvalue=-1; if((text==NULL) || (strlen(text)==0)) return rvalue; window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(window); gtk_widget_set_usize(window,320,125); gtk_window_set_policy(GTK_WINDOW(window),0,0,0); gtk_window_set_modal(GTK_WINDOW(window),1); if(tile &&strlen(tile)) gtk_window_set_title(GTK_WINDOW(window),tile); else gtk_window_set_title(GTK_WINDOW(window),\",hjk\"); vbox=gtk_vbox_new(0,10); gtk_container_set_border_width(GTK_CONTAINER(vbox),10); gtk_container_add(GTK_CONTAINER(window),vbox); gtk_widget_show(vbox); hbox=gtk_hbox_new(0,10); gtk_box_pack_start(GTK_BOX(vbox),hbox,1,1,0); gtk_widget_show(hbox); tempId=(GtkWidget*)NULL; if(tempId) gtk_box_pack_start(GTK_BOX(hbox),tempId,0,0,0); text_tempId=gtk_label_new(text); gtk_box_pack_start(GTK_BOX(hbox),text_tempId,1,1,0); gtk_widget_show(text_tempId); separator_tempId=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox),separator_tempId,0,0,0); hbox=gtk_hbox_new(1,0); gtk_box_pack_start(GTK_BOX(vbox),hbox,0,0,0); gtk_widget_show(hbox); switch(type) { case 0: button_tempId=gtk_button_new_with_label(\"Yes\"); gtk_box_pack_start(GTK_BOX(hbox),button_tempId,1,1,100); gtk_signal_connect(GTK_OBJECT(button_tempId),\"clicked\", GTK_SIGNAL_FUNC(call_back_cancel),window); GTK_WIDGET_SET_FLAGS(button_tempId,GTK_CAN_DEFAULT); gtk_widget_grab_default(button_tempId); gtk_widget_show(button_tempId); break; default: ok_button=gtk_button_new_with_label(\"YES\"); gtk_box_pack_start(GTK_BOX(hbox),ok_button,1,1,30); gtk_signal_connect(GTK_OBJECT(ok_button),\"clicked\", GTK_SIGNAL_FUNC(call_back_retry),window); GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT); gtk_widget_grab_default(ok_button); gtk_widget_show(ok_button); no_button=gtk_button_new_with_label(\"No\"); gtk_box_pack_start(GTK_BOX(hbox),no_button,1,1,30); gtk_signal_connect(GTK_OBJECT(no_button),\"clicked\", GTK_SIGNAL_FUNC(call_back_cancel),window); gtk_widget_show(no_button); break; } gtk_signal_connect(GTK_OBJECT(window),\"key_press_event\", GTK_SIGNAL_FUNC(call_back_key_press),window); gtk_widget_show(window); while(rvalue==-1) usleep(100000); //在这里阻塞了 !!! return rvalue; } |
|