首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

进程控制有关问题,求达人指教

2012-02-22 
进程控制问题,求达人指教switch(event- keyval){caseGDK_Return:if(player1){child_pidfork()if(chil

进程控制问题,求达人指教
switch(event-> keyval)
    {
                case   GDK_Return:
                        if(player==1)
                        {
                                  child_pid=fork();
                  if(child_pid==-1)
                  {
return;
  }
  if(child_pid==0)
                                  {
                                          memset(buf,0,sizeof(gint)*7);
                                          len=recv(clifd1,buf,sizeof(gint)*7,0);  
                                          if(len==sizeof(gint)*7)
                                          {  
        whiteflag=1;
                                                        g_print( "%d\n ",buf[0]);
        g_print( "%d\n ",buf[1]);
        g_print( "%d\n ",buf[2]);
        g_print( "%d\n ",buf[3]);
        g_print( "%d\n ",buf[4]);
        g_print( "%d\n ",buf[5]);
        g_print( "%d\n ",buf[6]);
                                                        num=buf[2]*(LINE+1)+buf[1];
        g_print( "%d\n ",num);
                                                        MyStoreItem[num].type=buf[0];
                                                        MyStoreItem[num].x=buf[1];
                                                        MyStoreItem[num].y=buf[2];
                                                        MyStoreItem[num].dir.udnum=buf[3];
                                                        MyStoreItem[num].dir.rdnum=buf[4];


                                                        MyStoreItem[num].dir.rlnum=buf[5];
                                                        MyStoreItem[num].dir.ldnum=buf[6];
                                          }
                                  }

  if(player==1&&whiteflag==1)
  {
                                    exit(statu);
                                  }
                    }
                    gtk_widget_set_sensitive(widget,0);

 
                    GTK_WIDGET_SET_FLAGS(ft_table,   GTK_CAN_FOCUS);   //使ft_table能
                                                                                                                                                            //得到焦点
                    gtk_widget_grab_focus(ft_table);                                 //设置焦点
                                 
                    gtk_widget_hide(draw_area);
                    gtk_widget_show(draw_area);

                    break;
            default   :
                    break;


上面是程序部分代码,g_print函数只是用来调试的,我看看到底接受到对方传来的数据没有,在程序中我用fork(),创建一个进程,在进程中接受数据,在程序后面,调用exit()来结束创建的进程,问题就出现了,如果调用exit(),那么通过调试信息,确实得到对方传来的数据,但是就是不会将传来的棋子信息画在棋盘上,但是如果不调用exit()函数,那么就可以将棋子正确的画在棋盘上了,不过会提示错误,大概就是没有结束创建的进程吧,那个错误我也没有看明白,求教达人,该在何处,如何结束创建的进程,使程序正常?

[解决办法]
你的gtk程序,要用thread。 gdk_thread....

热点排行