mfc 运行时 cpu占用太高 直接%100 求帮助 5

我做的是一个MFC的聊天程序本来各各客户端用的是tcp我为了减小程序的负担就改为了UDP期初就是因为cpu占有点高觉的改为UDP会好点通信原理是和qq一样就是各clien... 我做的是一个MFC 的聊天程序 本来各各客户端用的是tcp 我为了减小程序的负担就改为了UDP 期初就是因为cpu占有点高 觉的改为UDP 会好点 通信原理是 和qq一样 就是各client登陆服务器从服务器上得到各各 登陆用户和注册用户的信息回传给各client 而后client就由client状态 变为服务器 来接收别的client对他发出的连接,而后他们相互通信 这时 服务器只是当有新的用户登陆时 以tcp的形通知 client 或者广播信息 期间在各客户端退出前与服务器都保持连接 我用一个线程作为与服务器保持通信的线程 一个用与监听新到连接(就是客户端 ) 现在程序做的都差不多了 可是cpu占有高的问题 一直在心头想弄好贴上 客户端监听 代码 请各位同仁 帮忙 谢谢了

UINT client::accect_to(LPVOID pParam)
{

WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 1, 1 );
int err = WSAStartup( wVersionRequested, &wsaData );//加载套接字库
if ( err != 0 ) {
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}
SOCKET socket1;
struct sockaddr_in local;

struct sockaddr_in from;
int fromlen =sizeof(from);

local.sin_family=AF_INET;

local.sin_port=htons(atoi(allmess[0].port)); ///监听端口

local.sin_addr.s_addr=htonl(INADDR_ANY); ///本机

socket1=socket(AF_INET,SOCK_DGRAM,0);

bind(socket1,(struct sockaddr*)&local,sizeof local);
char *token;
while (1)

{

char buffer[1024]="\0";
char c[10000]="\0";
int nTimeOut = 3000;// 超时值为3s
setsockopt(socket1, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut,sizeof(nTimeOut));
// 超时值为3s
setsockopt(socket1, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut,sizeof(nTimeOut));
if (recvfrom(socket1,c,sizeof(c)+1,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)

{
AfxMessageBox(c);
token = strtok(c, ":");
for(int i=0;i<listcount;i++)
{
if ((strcmp(token, allmess[i].name))== 0)
{token = strtok(NULL, ":");

if(allmess[i].winstu==1)
{chat1::reflesh(c);
}
else
{

allmess[i].win=new chat1();

allmess[i].winstu=1;
allmess[i].win->socket1=socket1;

sprintf(allmess[i].win->ip, "%s", inet_ntoa(from.sin_addr));

sprintf(allmess[i].win->port, "%d", ntohs(from.sin_port));
allmess[i].win->fromlen=fromlen;
//char edit[10000];=

//allmess[i].win->m_shuchu=edit;
allmess[i].win->m_shuchu=c;
CWinThread *th =AfxBeginThread(chatshow,allmess[i].win);
//
//AfxMessageBox("ddd222");

}
}
}
}
Sleep(1);

////给cilent发信息

//sendto(socket1,buffer,sizeof(buffer)+1,0,(struct sockaddr*)&from,fromlen);

}//while

closesocket(socket1);
return 0;
}
展开
 我来答
归悦欣cf
2013-11-03 · TA获得超过1442个赞
知道大有可为答主
回答量:4250
采纳率:60%
帮助的人:1196万
展开全部
试一试跟踪程序,看一看Sleep(1); 是否被执行,如果Sleep(1)不被执行,CPU占用率会很高。
追问
Sleep(1) 在那咱情况下不执行呢
追答
除了检测链接,就应该执行Sleep。网络方面不是很了解,另外举一个例子:

在一个子线程里面不断检测串口的例子,在循环里面用while循环检测:
while(1)
{
if(checkCom());//如果函数checkCom()函数返回1,表示有com有数据到达,需要处理数据
{
handleData();//处理接收到的数据
}
else
{
sleep(10);//如果函数checkCom()函数返回0,说明没有数据需要处理,使线程休眠。
}
}

如果象下面这样,CPU占用率会很高
while(1)
{
if(checkCom());//如果函数checkCom()函数返回1,表示有com有数据到达,需要处理数据
{
handleData();//处理接收到的数据
}
}
百度网友9cc0247
2013-11-02
知道答主
回答量:35
采纳率:0%
帮助的人:8.8万
展开全部
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式