whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1094回复:0

子进程的问题,苦恼!

楼主#
更多 发布于:2003-04-16 20:22
在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;
}
游客

返回顶部