2 denny2499 denny2499 于 2014.12.04 21:54 提问

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

我采用的是异步方式事件触发的形式读取串口数据,采用的是readfile函数,ReadFile(hCom, lpInBuffer,dwBytesRead, NULL,&m_osRead); 但是总是读不全就开始处理数据了,读不全的意思是,我原本打算每秒接收到数据是2k左右(接收的数据不是固定的),但是可能接收到100B或者200B就开始处理了,请问有什么方式可以实现全部收到后再处理。还有,我们没有对COMMTIMEOUTS读写超时设置,请问有必要设置么?谢谢各位了

2个回答

91program
91program   Ds   Rxr 2014.12.05 07:35

将接收到的数据缓冲在一起,然后对缓冲区中的数据进行分析。无论是接收到100B或者200B,或者是按一定的协议格式进行处理,都可以的。
只要不丢数据就行,所以对 COMMTIMEOUTS读写超时设置也没有什么要求。

如果是接收一次,就处理一次,那么 COMMTIMEOUTS读写超时设置必须按数据要求严格设置定。否则,可能会出现数据本应该一起到的,但实际却是分为两次到。
但就算是设置了 COMMTIMEOUTS读写超时设置也可能遇到上述问题的,只是概率低一些。所以建议采用接收、缓冲(不丢失)数据的处理方式。

sz76211822
sz76211822   2014.12.05 08:32

while循环,一直读就可以了,做好线程同步、解决好粘包问题即可

Csdn user default icon
上传中...
上传图片
插入图片