大家的接收线程是怎么实现的啊?怎么我的接收线程消耗CPU资源这么大啊?
我的服务程序在一个客户端接入以后就开一个接收线程,负责接收它的数据。
在此期间客户机保持和服务器的连接。
实际运行时,发现这个接收线程一运行,CPU利用率达到100%,根本接收不了其他的连接,请问大家怎么处理接收线程的?怎么改善接收线程的性能?
// 接收数据线程如下:
DWORD WINAPI RecvThread(LPVOID lParam)
{
int Socket;
Socket= (int )lParam;
fd_set fdRead;
struct timeval tmvTimeout={0L,100L};
char RecvBuf[256];
while (TRUE)
{
// 初始化
FD_ZERO(&fdRead);
FD_SET(Socket,&fdRead);
int ret = select(0,&fdRead,NULL,NULL,&tmvTimeout);
if (ret == SOCKET_ERROR)
{
printf("Select() Socket error: %d..\n",GetLastError ());
continue;
}
else if (ret > 0)
{
if (FD_ISSET(Socket,&fdRead))
{ // 有数据可读
nRecv= recv (Socket, RecvBuf, sizeof( RecvBuf), 0);
if (nRecv == SOCKET_ERROR)
{ // 读数据出错
printf("Recv socket error: %d..\n",GetLastError());
}
else
if (nRecv == 0)
{ // 客户端断开连接
printf("remote socket closed..\n");
closesocket(Socket);
break;
}
// 数据读入成功,做数据处理
printf("Successfully receive %d bytes..\n"),nRecv);
ProcessData(RecvBuf);
}
}
}
printf("Recv thread exit with 0..\n");
return 0;
}