1. 我用MSComm控件接收数据时CPU使用率很高!怎么解决?2. 程序如下:
void CTempletDlg::OnOnComm() 
{
if(comm.GetCommEvent()==2)           
{
RxdAll();
}
}
void CTempletDlg::RxdAll()
{
COleVariant myVar;
COleSafeArray safearray_inp;
LONG k,len;
BYTE rxdata[1024]; 
CString temp,RD; while(comm.GetInBufferCount()>0)//判断缓冲区
{
myVar.Attach(comm.GetInput());
safearray_inp=myVar;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++) 
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++) 
{
BYTE bt=*(char*)(rxdata+k);
temp.Format("%02X ",bt); 
m_Rxd = m_Rxd + temp;
} }
m_Rxd=m_Rxd+"\r\n";
m_ctrRXD.SetWindowText(m_Rxd); if(m_ctrRXD.GetLineCount()>=100)//超过100行清空
{
m_Rxd.Empty();
UpdateData(FALSE);
}
}

解决方案 »

  1.   

    你把len=safearray_inp.GetOneDimSize(); 改为len=30;或者其他常数看看会有什么反应。
      

  2.   

    1. 收到的一帧数据字节数越多,cpu占用率就越高
      

  3.   

    那你把长度设为固定值了吗???那样是不是CPU稳定了?但内存还是会增加。
      

  4.   

    1. 我把len设为固定值后,收不到数据了!