windows下可以通過調用ClearCommError來獲取接收的串口數據的長度。
代碼如下:
UINT GetDataSize(){ DWord dwError = 0; COMSTAT comstat; memset(&comstat, 0, sizeof(COMSTAT)); UINT size = 0; if (ClearCommError(m_hCom, &dwError, &comstat)) { size = comstat.cbInQue; } return size;}但是通過ClearCommError獲取到的并不一定是正確的數據長度,因為在你調用此函數時,數據不一定接收完成,所以在多次調用函數獲得的返回值不變時,才能保證數據長度的真確。
下面修改為阻塞型(有數據函數才會返回):
UINT GetDataSize(){ DWORD dwError = 0; COMSTAT comstat; memset(&comstat, 0, sizeof(COMSTAT)); UINT size = 0; while (size == 0) { if (ClearCommError(m_hCom, &dwError, &comstat)) { size = comstat.cbInQue; } } Sleep(3); UINT newSize= 0; if (ClearCommError(m_hCom, &dwError, &comstat)) { newSize= comstat.cbInQue; } while (newSize!= size) { size = newSize; Sleep(3); if (ClearCommError(m_hCom, &dwError, &comstat)) { newSize= comstat.cbInQue; } } return newSize;}新聞熱點
疑難解答