Программа отслеживает события COM порта. Функция WaitCommEvent вызывается асинхронно, затем функция WaitForSingleObject бесконечно долго ожидает наступления события. Подскажите способы завершения ожидания событий, и какой результат при этом вернет WaitForSingleObject? Спасибо.
unsigned int PortReadThread(void *)
{ // Флаг ожидания выполнения асинхронной операции
bool fWaitOnStat = FALSE;
// Реагируем на любое событие COM порта
// Создаем объект события
osStatus.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
while (hPort != INVALID_HANDLE_VALUE)
{
if (!fWaitOnStat)
{
if (!WaitCommEvent(hPort, &dwCommEvent, &osStatus))
{
if (GetLastError() == ERROR_IO_PENDING)
{ // Запущено ожидание события COM порта
fWaitOnStat = TRUE;
}
else
{ // Ошибка функции WaitCommEvent
}
}
else
{ // WaitCommEvent вернула управление сразу
}
}
else
{ // Ожидаем событие
dwRes = WaitForSingleObject(osStatus.hEvent, INFINITE);
fWaitOnStat = FALSE; // Произошло событие COM порта
switch(dwRes)
{
case WAIT_TIMEOUT:
// Эта ветка не должна получить управление
break;
case WAIT_FAILED:
// WaitForSingleObject завершилась неудачно
break;
case WAIT_OBJECT_0:
if (!GetOverlappedResult(hPort, &osStatus, &dwOvRes, FALSE))
{
// GetOverlappedResult завершилась неудачно
}
// Анализируем событие
}
}
}
…
}