老问题了,一直没写出来,其实这在上次写线程共用socket时就遇到了,在线程中发送东西还看不出来,但要是接收东西就要用得到了,你总不能让他一直在那等着接收吧.
下面是代码
fd_set fdR, nfdR; //定义fd
FD_ZERO(&fdR); //清0
FD_SET(s,&fdR); //关联fd
nfdR = fdR;
while(true)
{
fdR = nfdR; //重新付值
struct timeval timeout;//定义超时时间,
timeout.tv_sec = 1;
timeout.tv_usec = 0;
int sel = select(hsocke+1,&fdR,NULL,NULL,&timeout);
if (sel > 0)
{
s.Receive((char*)&ringmsg,sizeof(RingMsg)); //sel>0表示有东西可读了
}
}
这样就可以让线程不用一直等待了,时间长短可以自己设定.