当前位置: 技术问答>linux和unix
进程控制问题,求达人指教
来源: 互联网 发布时间:2016-01-26
本文导语: switch(event->keyval) { case GDK_Return: if(player==1) { child_pid=fork(); if(child_pid==-1) { return; } if(child_pid==0) ...
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("%dn",buf[0]);
g_print("%dn",buf[1]);
g_print("%dn",buf[2]);
g_print("%dn",buf[3]);
g_print("%dn",buf[4]);
g_print("%dn",buf[5]);
g_print("%dn",buf[6]);
num=buf[2]*(LINE+1)+buf[1];
g_print("%dn",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()函数,那么就可以将棋子正确的画在棋盘上了,不过会提示错误,大概就是没有结束创建的进程吧,那个错误我也没有看明白,求教达人,该在何处,如何结束创建的进程,使程序正常?
{
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("%dn",buf[0]);
g_print("%dn",buf[1]);
g_print("%dn",buf[2]);
g_print("%dn",buf[3]);
g_print("%dn",buf[4]);
g_print("%dn",buf[5]);
g_print("%dn",buf[6]);
num=buf[2]*(LINE+1)+buf[1];
g_print("%dn",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....