wince 下串口读线程,现在无法读到数据,求高手指点!谢谢,以下是代码!
//串口读线程
DWORD TML_Lib::CommRecvTread(LPVOID lparam)
{
TML_Lib *pTML = (TML_Lib *)lparam;
DWORD dwCommStatus = 0;
BOOL bResult = FALSE;
BOOL bClear = FALSE;
BOOL bReadResult = FALSE;
DWORD dwNumBytesRead = 0;
COMSTAT comstat;
DWORD dwError;
char RXBuff;
PurgeComm(pTML->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR |PURGE_RXABORT | PURGE_TXABORT);
SetCommMask(pTML->m_hComm, EV_RXCHAR);
while(1)
{
bResult = WaitCommEvent( pTML->m_hComm, &dwCommStatus, NULL);
if(bResult && (dwCommStatus&&EV_RXCHAR))// char arrived
{
memset(pTML->ReceiveBuf, 0, 512);
pTML->m_iReadCounter=0;
do
{
EnterCriticalSection(&pTML->m_cs); //now it is critical
bClear = ClearCommError(pTML->m_hComm, &dwError, &comstat);
if(comstat.cbInQue == 0) break;
dwNumBytesRead = 0;
RXBuff = 0;
bReadResult = ReadFile(pTML->m_hComm, // HANDLE to Comm port
&RXBuff, //RX Buffer Pointer
1, //Read one byte
&dwNumBytesRead, //store number of bytes read
NULL);
LeaveCriticalSection(&pTML->m_cs);
if(bResult && dwNumBytesRead == 1)
{
pTML->ReceiveBuf[pTML->m_iReadCounter++] = RXBuff;
}
}while(bReadResult && dwNumBytesRead == 1);
}//
if(WaitForSingleObject(pTML->m_ExitThreadEvent,500) == WAIT_OBJECT_0)//WAIT_TIMEOUT
{
break;
}
}
return 0;
}