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

Anmelden zum Antworten