Я дергаю за волосы, пытаясь понять, когда последовательный порт закончит закрытие, чтобы я мог снова его открыть. Оказывается, CloseHandle ()
возвращается до того, как порт действительно разблокируется.
Я открываю последовательный порт с помощью CreateFile (FILE_FLAG_OVERLAPPED)
, связываю его с CompletionPort с помощью CreateIoCompletionPort ()
, читаю / записываю его с помощью ReadFile ()
, WriteFile ()
и закрытие его с помощью CloseHandle ()
.
Я заметил, что если я закрываю и снова открываю последовательный порт достаточно быстро, я получаю ERROR_ACCESS_DENIED
обратно из CreateFile ()
.Это происходит, несмотря на то, что я жду возврата CloseHandle ()
, а затем ожидаю, пока все невыполненные операции чтения / записи, связанные с этим дескриптором, вернутся из порта завершения. Конечно, есть способ получше :)
Как мне синхронно закрыть последовательный порт? Пожалуйста, не используйте повторные попытки, sleep () или другие дешёвые уловки.
РЕДАКТИРОВАТЬ : Возможно, это как-то связано с тем, что я использую порты завершения и FILE_FLAG_OVERLAPPED. Я получаю обратный вызов после завершения операций чтения / записи. Есть ли какой-то обратный вызов для закрытия порта?