シリアルポートが閉じ終わったときを把握しようとして髪を引っ張っているので、再び開くことができます。CloseHandle()
ポートが実際にロック解除される前に戻ることが判明しました。
を使用してシリアルポートを開き、を使用CreateFile(FILE_FLAG_OVERLAPPED)
してCompletionPortに関連付け、を使用してCreateIoCompletionPort()
読み取り/書き込みを行い、を使用しReadFile()
てWriteFile()
閉じていCloseHandle()
ます。
シリアルポートをすばやく閉じて再度開くと、ERROR_ACCESS_DENIED
から戻ってくることに気づきましたCreateFile()
。CloseHandle()
これは、戻るのを待ってから、そのハンドルに関連付けられているすべての未処理の読み取り/書き込み操作が完了ポートから戻るのを待っているにもかかわらず発生しています。確かにもっと良い方法があります:)
シリアルポートを同期的に閉じるにはどうすればよいですか?ループ、sleep()、またはその他の安価なハックを再試行しないでください。
編集:多分これは私の完了ポートとFILE_FLAG_OVERLAPPEDの使用と関係があります。読み取り/書き込み操作が完了すると、コールバックが返されます。ポートを閉じるための何らかのコールバックはありますか?