Prosím o radu, kam mám vo WinApi umiestniť reagovanie na udalosť vzniknutú príjmom bajtov na sériovej linke RS232 pri asynchrónnom prenose. Do handleru WM_TIMER ? Ale to by bolo veľmi pomalé. Minimálny čas jedného cyklu je tuším 10 ms.
Po otvorení portu CreateFile a nastavení DCB som najprv nastavil masku
SetCommMask ( ComHandle, EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY );
...vytvoril udalosť
overlapped.hEvent = CreateEvent ( NULL, TRUE, FALSE, NULL );
....a do cyklu while dal čakanie na udalosť portu:
while(1)
{
WaitCommEvent ( ComHandle, &dwCommEvent, &overlapped);
dwEvent = WaitForSingleObject ( overlapped.hEvent, 200 );
if ( dwEvent == WAIT_OBJECT_0 )
{
if ( dwCommEvent == EV_RXCHAR )
{
// obsluha citania pomocou ReadFile()
}
}
if ( dwEvent == WAIT_TIMEOUT )
break;
}
CloseHandle ( overlapped.hEvent );
Skúšal som to dať do WM_TIMER, ale nefunguje to moc dobre. Ako sa to má správne používať? Kam to umiestniť?