Я пытаюсь написать простой класс для работы с последовательным портом в Windows, используя стандартную библиотеку Windows.
Мне нужно проверить, пуст ли буфер ввода.
До сих пор я пытался использовать SetCommEvent, используя опцию EV_RXCHAR, однако этот метод не работает. Функция, кажется, ждет прибытия нового символа. Если бы я попытался отправить char, поспать секунду и применить эту функцию, функция не вернулась бы - она продолжает ждать.
bool isEmpty()
{
DWORD dwEventMask = 0;
DWORD Status = 0;
if (CheckAsyncRead())
return false;
if (!SetCommMask(hPort, EV_RXCHAR)) //wait for char receival
std::cout << "Error in creating Overlapped event" << std::endl;
osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (WaitCommEvent(hPort, &dwEventMask, &osReader))
{
//close event handle
return false;
}
Status = WaitForSingleObject(osReader.hEvent, 10);
//I wait for 10 ms in case the function doesn't return immediately
//Close event handle
if (Status == WAIT_OBJECT_0)
{
return false;
}
else
return true;
}
Я надеялся, что WaitCommEvent или WaitForSingleObject вернутся, если в буфере присутствуют любые символы, но этого не произойдет, если между получением символа и вызовом функции Wait будет более длительная пауза.