Как уже предлагалось в комментариях, вам, вероятно, понадобится какой-нибудь внешний способ остановить ожидание, например, событие + WaitForMultipleObjects ().Вы также можете дождаться фактического дескриптора COM-порта, полученного из CreateFile.
Вам действительно нужно использовать WaitCommEvent?Насколько я знаю, эта функция нужна вам только в том случае, если вы используете сигналы рукопожатия и другие подобные странности.Вы можете использовать ReadFile, если вас интересуют только данные.По моему опыту, эта функция более надежна.
Я работал с аналогичными устройствами COM-портов, и самый надежный способ определить, что они были отключены, похоже, проверяет результат ReadFile:
BOOL result;
result = ReadFile(...);
if(result == FALSE)
{
DWORD last_error = GetLastError();
if(last_error == ERROR_OPERATION_ABORTED) // disconnected ?
{
close(); // close the port
}
}
Я, конечно, не уверен, будет ли это работать в вашем конкретном случае, но я использую этот метод в некотором производственном коде, который заканчивается множеством дрянных адаптеров USB-to-serial.