急求,线程提高CPU占用率。 while(1) { m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量 }这个函数没有出口啊,当然会占用CPU资源了,这不是个死循环嘛 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 程序为了实现消息时时更新UINT ReceiveMsg(LPVOID pParam){ while(1) { m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量 }return 0;}才占50%呀,你RP不错呀,一般会接近100%哟加个Sleep()吧;UINT ReceiveMsg(LPVOID pParam){ while(1) { m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量 Sleep(100);//0.1秒 }return 0;} 程序为了实现消息时时更新UINT ReceiveMsg(LPVOID pParam){ while(1) { m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量 }return 0;}才占50%呀,你RP不错呀,一般会接近100%哟===========================================估计楼主的是双核,所以只占50% 用Sleep函数会不会丢失数据? 不加的话线程不是要终止了吗?在SOCKET编程中加就没事啊。例如/////UDP接受信息线程开始UINT _UDPThread(LPVOID lparam){ CAaaDlg *pDlg=(CAaaDlg *)lparam; if(pDlg->StopServer==true) return -1; CSocket sockSrvrUdp; sockSrvrUdp.Create(PORT+pDlg->m_client,SOCK_DGRAM); char buff[100]={0}; int ret=0; CString ipStr; CString msg; UINT port; for(;;) { ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值 if(buff[0]=='D') return 0; if(ret==SOCKET_ERROR) { break; } msg.Format(buff); pDlg->AddMsgList(ipStr,msg); } sockSrvrUdp.Close(); return 0;} Socket分成阻塞式和非阻塞式,只有非阻塞式的Socket用死循环才会出现CPU占用率高的情况。可以用别的方式如Select,异步IO或者完成端口等 我是说SOCKET中这种死循环没有出现占用率高的问题. 看来cpu是双核的.因为socket的有些函数是阻塞式的. 你原来的这样哪里不好for(;;){ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值if(buff[0]=='D') return 0;if(ret==SOCKET_ERROR) {break;}msg.Format(buff);pDlg->AddMsgList(ipStr,msg);}sockSrvrUdp.Close();return 0;} 交互绘图时有颜色的橡皮条怎么实现? 关于线程调用的问题 vc2008网络开发遇到的问题 如何截获第三方软件的“文件保存”消息及保存的文件全路径名称 有关语音识别的问题!!up有分~~分不够再开贴 关于设备环境的一个简单的问题 很简单的一个问题 为什么我的ocx控件在IE中不能自动下载更新?? 请问大家,如何学好VC/MFC编程 请问仅有DLL通过什么方法可以得到它的Lib和.h? 请问编译时,出现no overload funtion take 1 parameters 是什么意思 ? 超市仿真系统
UINT ReceiveMsg(LPVOID pParam)
{
while(1)
{
m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
}
return 0;
}
才占50%呀,你RP不错呀,一般会接近100%哟
加个Sleep()吧;UINT ReceiveMsg(LPVOID pParam)
{
while(1)
{
m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
Sleep(100);//0.1秒
}
return 0;
}
UINT ReceiveMsg(LPVOID pParam)
{
while(1)
{
m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
}
return 0;
}
才占50%呀,你RP不错呀,一般会接近100%哟
===========================================
估计楼主的是双核,所以只占50%
例如
/////UDP接受信息线程开始
UINT _UDPThread(LPVOID lparam)
{
CAaaDlg *pDlg=(CAaaDlg *)lparam;
if(pDlg->StopServer==true) return -1;
CSocket sockSrvrUdp;
sockSrvrUdp.Create(PORT+pDlg->m_client,SOCK_DGRAM);
char buff[100]={0};
int ret=0;
CString ipStr;
CString msg;
UINT port;
for(;;)
{
ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值
if(buff[0]=='D') return 0;
if(ret==SOCKET_ERROR)
{
break;
}
msg.Format(buff);
pDlg->AddMsgList(ipStr,msg);
}
sockSrvrUdp.Close();
return 0;
}
可以用别的方式如Select,异步IO或者完成端口等
for(;;)
{ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值if(buff[0]=='D') return 0;
if(ret==SOCKET_ERROR)
{
break;
}
msg.Format(buff);
pDlg->AddMsgList(ipStr,msg);
}
sockSrvrUdp.Close();
return 0;
}