永发信息网

MFC中读取串口时数据总是不全,请问各位大侠有什么方式可以全部读好,谢谢了

答案:2  悬赏:30  手机版
解决时间 2021-02-13 22:26
我采用的是异步方式事件触发的形式读取串口数据,采用的是readfile函数,ReadFile(hCom, lpInBuffer,dwBytesRead, NULL,&m_osRead); 但是总是读不全就开始处理数据了,读不全的意思是,我原本打算接收到数据是2k(接收的数据不是固定的),但是可能接收到100B就开始处理了,请问有什么方式可以实现全部收到后再处理。还有,我们没有对COMMTIMEOUTS读写超时设置,请问有必要设置么?谢谢各位了
最佳答案
你调用ReadFile函数,一次接收多少字节,取决于两个因素:
(1)串口缓冲区实际有多少

(2)你打算取多少

ReadFile()函数的第三个参数表示你打算取多少,但如果你想去1024个,串口缓冲区只有500个,那你最多只能取500个。实际取了多少,会放到ReadFile()这个函数的第四个参数。一般要给这第四个参数传递一个引用。你怎么能填NULL呢?比较简单的办法如下:
DWORD dwReadCount = 0;
do{
ReadFile(hComm, lplnBuffer, dwBytesRead, &dwReadCount, &m_osRead);

if(dwReadCount == 2k)
......这里就可以处理了

else
{
.....// 先把本次读取到的数据存储到你真正能够处理的缓冲区

continue; // 继续读取

}
}

一个关键点是ReadFile()函数中的缓存区,只是为了让这个函数调用从而能够获得数据,具体处理缓冲区最好要自己另外定义,不要图省事直接对lplnBuffer这个缓冲区进行操作。
全部回答
相关参数设置对了吗?缓冲区的大小啊啊啊啊啊 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
青堆商贸城地址在哪,我要去那里办事
职称名称和技术职称的区别
请问歌词有哦撒啦黑,……黑就……的韩语歌,
有富奶粉批发这个地址在什么地方,我要处理点
赣州到陕西澄澄县怎么去????
单选题我们在公路上常常会看到汽车遇到紧急情
L型钙离子通道中的主要功能亚单位是A.α1B.α
支付宝转帐,帐号输入错误一个号,用户名输入
广东有什么专科学校环境比较好的?(分数线不
孕妇梦见漂亮的月季花但不小心摔倒把月季花根
白雪对什么对子
一公斤等于多少平方千米
安远县公安局公路巡逻民警大队版石中队这个地
由筑路队队长新的一年成为机械队队长需要一份
2015国家执业药师考试合格分数线是多少
推荐资讯
it专业,专科7年工作经验,一般什么待遇?
很早以前看的一部玄幻小说,背景是地球的现代
古诗词与古诗有什么区别
关于介入放射学的特征,下列不正确的是A.是诊
做榻榻米,是请工人自己打比较好还是让做整体
为减少天线设备的电场辐射对某区域环境的影响
个人跑印刷业务好做吗怎么去做
英雄联盟微信群,你加了吗?
博大牌匾地址在什么地方,想过去办事
张学友唱过爱与愁吗
谁知道一部电影中17分钟说唱歌曲的名字,电影
蔡营麻辣烫在什么地方啊,我要过去处理事情
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?