MFC ecdit数据量很多 显示很导致程序很卡
void CMy3Dlg::OnMSComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
char* pdata;
CString strtemp;
CString showtextstr;
if(comIsInit != TRUE)
return;
if(fp == NULL)
{
fp = fopen(m_ShowDefFile,"w");
if(fp == NULL)
return;
}
if(m_a.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp = m_a.GetInput(); //读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArra变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度
pdata = (char*)malloc(len+1);
showtextstr = "";
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,pdata+k);//转换为BYTE型数组
BYTE bt=*(char*)(pdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
showtextstr+=strtemp;//加入接收编辑框对应字符串
}
int len=m_ShowText.GetLineCount();
if(len > 300)
{
m_ShowText.SetSel(0,len-300,TRUE);
m_ShowText.ReplaceSel("");
}
len=m_ShowText.GetWindowTextLength();
m_ShowText.SetSel(len,len);
m_ShowText.ReplaceSel(showtextstr);
fwrite(showtextstr,sizeof(char), strlen(showtextstr), fp);
free(pdata);
}
}
接受数据并Cedit显示的串口程序,当数据量很多以后,很出现程序被卡住。
去掉标红色的部分(不去显示串口的数据),就不是很卡。
注意:串口数据量很大。