RS232 DataQueue
-
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; }