mscomm控件接收数据多行显示内存增大的问题!

hellodhh 2012-07-27 02:40:31
mscomm控件接收数据多行显示,在显示过程中内存增大,代码如下;

if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
myVar.Attach(m_ctrlComm.GetInput());
safearray_inp = myVar; //COleVariant型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //验证得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组

if(rxdata[0]==5&&rxdata[2]==82&&rxdata[3]==4)
{
y.redata[0]=rxdata[4];
y.redata[1]=rxdata[5];
y.redata[2]=rxdata[6];
y.redata[3]=rxdata[7];
fdata=y.f_data;
strtemp.Format("%0.2f m\r\n",fdata);


/***************编辑框中显示结果*********************************************/

m_recive+=strtemp; // 加入接收编辑框对应字符串
UpdateData(FALSE); //更新编辑框内容 OR SetDlgItemText(IDC_EDIT_RXDATA,m_strRXData);
p->LineScroll(p->GetLineCount());//滚动条置底
m_recive+=strtemp; 就是执行了这句后内存一直增大,不知道什么原因,请高手帮忙分析下怎么解决!
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
一直显示并保存所有数据,内存一定会增加
hellodhh 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

sory :m_recive.Left(1024);应该是Right,保留后来的
[/Quote]
有没有可以一直显示并保存所有数据,内存也不增加很大的方法呢?
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
sory :m_recive.Left(1024);应该是Right,保留后来的
hellodhh 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

m_recive += strtemp;
m_recive = m_recive.Left(1024);
[/Quote]
不错,内存增加减少了一半,有没有更好的方法可以让内存不怎么增加那么大呢?
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
m_recive += strtemp;
m_recive = m_recive.Left(1024);
hellodhh 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

如果是不断显示,则删除前面的内容,只保留 256 的字节(或 1024)
[/Quote]
怎么写代码呢?
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
如果是不断显示,则删除前面的内容,只保留 256 的字节(或 1024)
hellodhh 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

编辑框本身要内存的
[/Quote]
那这能解决吗?
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
编辑框本身要内存的

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧