- 论坛徽章:
- 0
|
我的代码是这样的:
char buf[1];
fd_set rset;
struct timeval wtime;
wtime.tv_sec = 0;
wtime.tv_usec = HITOP_TIMERINTERVAL2 * 1000;
int rc;
while(thread && thread->;Running())
{
if (m_hSocket == INVALID_SOCKET)
return 1;
FD_ZERO(&rset);
FD_SET(m_hSocket, &rset);
rc = select(m_hSocket+1, &rset, NULL, NULL, &wtime);
#ifdef _LINUX
Sleep(20);
#endif
if(rc == 0) continue;
rc = recv(m_hSocket, buf, 1, MSG_PEEK);
if(rc == 0)
{
OnClose(0);
return 1;
}
else
{
if(rc < 0 && GetLastError() == 1003 return 2; // not sock
OnReceive(0);
}
}
return 0;
原因是这样的。这个程序的功能是线程的主调函数,可是在linux下。调用select的方法居然没有堵塞住。一直是死循环!RC结果为:0,所以程序一直执行 continue。机器的cpu利用率为100%,请各位高手帮我想一下怎么处理! |
|