Witam, mam problem odnosnie sprawdzania statusu portu COM. Otwieram go z flaga FILE_FLAG_OVERLAPPED, odczyt oraz zapis dzialaja, ustawiam maske na uchwyt, jednak program krzywo sprawdza status. Sama funkcja ponizej:

DWORD GetStatusCOM(DWORD dPort) {
	std::list<Port>::iterator itr;

	for(itr = Ports.begin(); itr != Ports.end(); ++itr) {
		if(itr->dPort == dPort) {
			DWORD      dwRes;
			DWORD      dwCommEvent = 0;
			DWORD dwOvRes;
			BOOL fWaitingOnStat;
			OVERLAPPED osStatus = {0};

			osStatus.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
			if (osStatus.hEvent == NULL) {
				CloseHandle(osStatus.hEvent);
				return -1;
			}
			if (!WaitCommEvent(itr->hCom, &dwCommEvent, &osStatus)) {
				if (GetLastError() == ERROR_IO_PENDING) {
					fWaitingOnStat = TRUE;
				} else {
					CancelIo(itr->hCom);
				}
			}
			if (fWaitingOnStat) {
				dwRes = WaitForSingleObject(osStatus.hEvent, itr->dWait);
				switch(dwRes) {
			 case WAIT_OBJECT_0: 
				 if (!GetOverlappedResult(itr->hCom, &osStatus, &dwOvRes, FALSE)) {
					printf("ten blad nie powinien sie pojawic\n");
					 CloseHandle(osStatus.hEvent);
					 return GetLastError();
				 } else {
					 CloseHandle(osStatus.hEvent);
					 return dwCommEvent;
				 }
			 case WAIT_TIMEOUT:
				 CloseHandle(osStatus.hEvent);
				 return -97;

			 default:
				 CloseHandle(osStatus.hEvent);
				 return -1;
				}
			}
		}
	}
	return -2;
}

Gdy wywolam write do portu i sprawdze status, wszystko jest OK, status zwraca dobry wynik.
Gdy wywolam pobieranie statusu np. dwa razy pod rzad dostaje niestety timeouty. Co wiecej Kobminacja:
write, getstatus, getstatus, write, getstatus daje mi wynik: dobry status, timeout, timeout.
Gdy funkcja sprawdzajaca status jest w osobnym watku, rowniez wystepuja te same objawy.