CloseHandle () возвращается до того, как последовательный порт фактически closed

Я дергаю за волосы, пытаясь понять, когда последовательный порт закончит закрытие, чтобы я мог снова его открыть. Оказывается, CloseHandle () возвращается до того, как порт действительно разблокируется.

Я открываю последовательный порт с помощью CreateFile (FILE_FLAG_OVERLAPPED) , связываю его с CompletionPort с помощью CreateIoCompletionPort () , читаю / записываю его с помощью ReadFile () , WriteFile () и закрытие его с помощью CloseHandle () .

Я заметил, что если я закрываю и снова открываю последовательный порт достаточно быстро, я получаю ERROR_ACCESS_DENIED обратно из CreateFile () .Это происходит, несмотря на то, что я жду возврата CloseHandle () , а затем ожидаю, пока все невыполненные операции чтения / записи, связанные с этим дескриптором, вернутся из порта завершения. Конечно, есть способ получше :)

Как мне синхронно закрыть последовательный порт? Пожалуйста, не используйте повторные попытки, sleep () или другие дешёвые уловки.

РЕДАКТИРОВАТЬ : Возможно, это как-то связано с тем, что я использую порты завершения и FILE_FLAG_OVERLAPPED. Я получаю обратный вызов после завершения операций чтения / записи. Есть ли какой-то обратный вызов для закрытия порта?

6
задан Gili 17 January 2012 в 14:44
поделиться