У меня есть устройство, которое генерирует сообщения через последовательный порт. Когда я перезагружаю устройство, порт завершения ввода-вывода перестает считывать байты.GetQueuedCompletionStatus перестает читать последовательный порт
Код вызывает GetQueuedCompletionStatus():
BOOL bRet = GetQueuedCompletionStatus(
m_hCompletionPort,
&dwBytesTransferred,
&dwCompletionKey,
&pOverlapped,
INFINITE);
PortMon выглядит следующим образом:
...
IRP_MJ_WRITE Serial1 SUCCESS LENGTH: 7 REBOOT.
IRP_MJ_READ Serial1 CANCELLED LENGTH: 1
Logging показывает следующий результат:
bRet=true, dwBytesTransferred=7, pOverlapped=0x0202B028, GetLastError()=997
(sleep forever)
Есть ли способ, чтобы обнаружить это отказ и восстановление связи?
Я могу отслеживать тепловой удар и закрывать/открывать последовательный порт, но не кажется правильным, что API окон позволяет бесшумно отключать последовательную связь.
Спасибо. Я пытался справиться с этим, не отвлекаясь на использование порта завершения ввода-вывода, но похоже, что у меня нет выбора. – 2009-09-14 00:13:45
У вас есть выбор: см. Мой ответ! – janm