用CSerialPort类来写的串口通信,接收数据有问题

lulanqin 2013-05-15 10:05:19
发送的字节数 6506,为什么只收到字节数只有4121?
问题点1:就是收不完数据就停止了,
问题点2:接收显示的速度太慢?接收4121个字节需要快50秒。但是我给串口调试助手同样的数据,它不用3秒就接收完了。
另外数据格式还没有调整好,
本人新手。希望大家多多帮忙。




接收数据的代码如下

void LoginDlg::OnReceiveChar(UINT ch, LONG port)//接收数据,然后显示在框中。
{
UpdateData(true);
m_nReceiveBytes++; //接收字节数
CString temp,temp2;
temp.Format("%d",m_nReceiveBytes);
m_strReceiveBytes=temp;


temp2.Format("%c ",ch);
m_strReceive+=temp2;

UpdateData(false); //将接收到的字符显示在接收编辑框中

((CEdit*)GetDlgItem(IDC_ReceiveEdit))->LineScroll(
m_strReceive.GetLength()/(((CEdit*)GetDlgItem(IDC_ReceiveEdit))->LineLength()));
}
...全文
353 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2013-05-16
  • 打赏
  • 举报
回复
在OnReceiveChar函数里不要执行和控件有关的操作,比如UpdateData(true);,UpdateData(false); //将接收到的字符显示在接收编辑框中 ((CEdit*)GetDlgItem(IDC_ReceiveEdit))->LineScroll( m_strReceive.GetLength()/(((CEdit*)GetDlgItem(IDC_ReceiveEdit))->LineLength())); 这些函数,因为执行这些函数至少会需要十毫秒以上, 你收这么多数据,最好在线程里进行处理显示,这样能快些。另外,要最好收全后再一次性显示,除非你想做成串口助手那样的功能,就是想做成串口助手的功能最好也要收到一定数量的数据再显示(比如收到10个再显示)
rxguoblp 2013-05-16
  • 打赏
  • 举报
回复
串口通信之流的东西就不要从底层写起了,细节问题太多,容易出错。用MSCOMM32控件呀,设置好端口号、波特率、缓存区大小之类的东西,批量接收数据。几乎察觉不到时间延迟。
lulanqin 2013-05-16
  • 打赏
  • 举报
回复
谢谢你的提示

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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