Прием символа в Com порт
//заполняем dcb
dcb.BaudRate = CBR_9600;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
dcb.EvtChar = 'E';// ожидаемый символ
//сам поток чтения
DWORD WINAPI ReadThread(LPVOID)
{
COMSTAT comstat;
DWORD btr, temp, mask, signal;
overlapped.hEvent = CreateEvent(NULL, true, true, NULL);
SetCommMask(ComPort, EV_RXCHAR);
while (1)
{
WaitCommEvent(ComPort, &mask, &overlapped);
signal = WaitForSingleObject(overlapped.hEvent, INFINITE);
if (signal == WAIT_OBJECT_0)
{
if (GetOverlappedResult(ComPort, &overlapped, &temp, true))
if ((mask & EV_RXCHAR) == EV_RXCHAR)//проверка символа из структуры dcb
{
ClearCommError(ComPort, &temp, &comstat);
btr = comstat.cbInQue;
if (btr)
{
ReadFile(ComPort, bufrd, btr, &temp, &overlapped);
counter+=btr;
int dlbufrd = strlen(bufrd);
unsigned char ks = crc8_buf(bufrd,dlbufrd-1);
ReadPrinting();
}
}
}
}
}
Проблема в том, что поток чтения активирует считывание информации с порта по приходу любого символа. Хотя я явно указал в структуре dcb символ 'E'. В чем может быть ошибка?
Заранее всем очень благодарен!!!!!
Разобрался сам! вместо EV_RXCHAR нужно использовать EV_RXFLAG.