VC++串口控件CMSComm接收数据造成CPU占用率不断增加的问题

最近项目中用到串口接收数据,并把数据显示在编辑框中的代码。程序运行后发现CPU占用率一直增加造成计算机运行卡顿的现象,接收数据的代码如下:

VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[4096]; //4096//设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_ComData.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    {             以下你可以根据自己的通信协议加入处理代码
        variant_inp=m_ComData.GetInput(); //读缓冲区
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度
        for(k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for(k=0;k<len;k++) //将数组转换为Cstring型变量
        {
            BYTE bt=*(char*)(rxdata+k); //字符型
            strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
            m_strRXData+=strtemp; //加入接收编辑框对应字符串
        }
    }
    UpdateData(FALSE); //更新编辑框内容

逐步调试程序跟踪到代码中的加粗部分

variant_inp=m_ComData.GetInput();

发现每执行一次CPU占用率增加一些,这个代码是串口自己封装的函数应该不会有问题。在网上查找资料发现有两种解决方法。

1、VC++自带的串口控件不好用,应该用串口的API程序。但如果这样做的话会改动很多代码,加大了编程的工作量。

2、把 variant_inp=m_ComData.GetInput(); //读缓冲区

改为

COleVariant myVar;

myVar.Attach (m_ComData.GetInput());

经过测试发现CPU占用率还是一直增加。继续查找资料在接收数据的代码后又添加了一行代码:

VariantClear(&myVar);//清空变量

经过测试发现CPU的占用率不再一直增加了。

总结:在串口读取数据后要调用VariantClear函数清空变量,可以有效防止因为串口读取数据造成的CPU占用率一直增加的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值