代码1和代码2的区别在哪?我在串口的上使用,代码1无bug,代码2有bug
代码一:
DWORD dwCommMask=0;
if (!GetCommMask(m_hComHandle, &dwMask) || dwMask != DEFAULT_COM_MASK){
SetCommMask(m_hComHandle, DEFAULT_COM_MASK);
continue;
}
if (dwMask & EV_ERR){ // Error is detected on the downstream port
ClearCommError(m_hComHandle, &dwErrors, NULL);
}
if (dwMask & EV_BREAK){ // Break is detected on the downstream port
ClearCommBreak(m_hComHandle);
}
// 侦测到有数据,读取并处理之
if (dwMask & EV_RXCHAR){
do{
dwRead=m_pSerialPort->ReadData((LPVOID)szData, RESP_DATA_BUF_LEN);
if(dwRead){
HandleRxData(szData, dwRead);
}
}
while(dwRead == RESP_DATA_BUF_LEN);
}
代码二:
ClearCommError(m_hComHandle, &dwErrors, &(m_pSerialPort->ComStats));
if(m_pSerialPort->ComStats.cbInQue){
dwRead = m_pSerialPort->ReadData((LPVOID)szData, m_pSerialPort->ComStats.cbInQue);
if(dwRead){
HandleRxData(szData, dwRead);
}
}
[解决办法]
这是声音和视频的消息读取?
[解决办法]
m_pSerialPort->ComStats.cbInQue
应该是这个有问题吧,对ComStats结构体看下
[解决办法]
ReadData并不是每次能全部取出数据,你得判断每次接收的数据长度