我的服务程序在一个客户端接入以后就开一个接收线程,负责接收它的数据。
在此期间客户机保持和服务器的连接。
实际运行时,发现这个接收线程一运行,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(
socket 接收线程实现(帖子)
最新推荐文章于 2024-04-25 18:21:16 发布
本文讨论了一个服务程序在接收到客户端连接后,CPU利用率升至100%的问题。作者提供了接收线程的代码,并指出使用`select()`函数导致的问题。其他开发者建议通过添加`sleep()`、使用事件触发或调整错误处理来改善性能。
摘要由CSDN通过智能技术生成