?
Hallo,
ist es möglich die Datenlänge der Queue (RS232) noch anders zu ermitteln
als im Beispiel durch ::GetComPropertys ?
DWORD CSerialIO::ComLoop(LPVOID pParam)
{
CThread *pTh((CThread *)pParam);
CSerialIO *pSio((CSerialIO *)pTh->GetClientData());
DWORD dwSz(0);
COMMPROP prop={0};
OVERLAPPED ovRead={0};
HANDLE hThSerEv[] = {(ovRead.hEvent = ::CreateEvent(0,true,0,0)),pTh->GetEndingHandle()};
while(!pTh->IsEnding())
{
DWORD mask(0);
if(!::WaitCommEvent(pSio->m_ComDev,&mask, &ovRead))
if(::WaitForMultipleObjects(2,&hThSerEv[0],FALSE,INFINITE) != WAIT_OBJECT_0)//WAIT_OBJECT_0 + 1 (exit)
break;
if(!(mask & EV_RXCHAR))
continue;
if(!::GetCommProperties(pSio->m_ComDev,&prop))//how many bytes are in queue ?
break;
if(!::ReadFile(pSio->m_ComDev,&pSio->m_Buff[0],prop.dwCurrentRxQueue,&dwSz,&ovRead))
break;
if(pSio->m_pcallback && !pSio->m_pcallback(&pSio->m_Buff[0],dwSz, pSio->m_UserDat,pSio))
break;
}
::CloseHandle(ovRead.hEvent);
pTh->SetEnding();//endsignal
return 0;
}