作者homal (\冏/)
看板LinuxDev
标题[问题] 请教一个thread的问题
时间Mon Nov 13 02:24:39 2006
小弟斗胆,请大家帮我看一下,我的thread哪边用错了
这是一个socket 程式, 其中 receive() 是用thread 来跑
此程式为client 端,他要接收来自server 端的文字讯息
而且也能发送文字讯息给 server
int fd; //global variable
void*
receive(void* id) //让thread一直检查,资料是否能从 server 读取
{
char rcvbuf[1024]; //如果有资料从server来,那就print出来
int i;
while(1)
{
bzero(rcvbuf,sizeof(rcvbuf));
if( (i=read(fd,rcvbuf,sizeof(rcvbuf))) >0)
printf ("msg from [server]:%s",rcvbuf);
}
pthread_exit(NULL);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以下这一段 是main() 中,关於thread的部份
pthread_t threads[2];
connect(fd,(struct sockaddr*)&addr,sizeof(addr))
printf ("\n,the message from server:%s\n",msg);
pthread_create(&threads[0], NULL, receive, (void *)1);
while(1) // 此段是用来 input 文字讯息给 server 的
{
bzero(sndbuf,sizeof(sndbuf));
printf ("input msg to server:");
fgets (sndbuf,sizeof(sndbuf),stdin);
write (fd,sndbuf,sizeof(sndbuf));
}
我想问一下,我的thread这样写,有问题吗
因为我发现,我的receive() 不太会跑 (照常理应该是一直在run)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.8.143.66
1F:推 jokker:呼叫pthread_join,让他们两个同步看看? 11/13 09:51
2F:推 yhuiyang:就您 po 出来的地方 似乎没有大问题 至多检查一下回传值 11/13 18:10
3F:→ yhuiyang:您说您的 client 不太会跑, 因为 read(2)预设是 blocking 11/13 18:10
4F:→ yhuiyang:mode, 而且并未从 socket 中读到东西,他就不会跑罗... 11/13 18:12