我正在拉扯我的头发,试图弄清楚串行端口何时完成关闭,以便我可以重新打开它。事实证明,CloseHandle()
在端口实际解锁之前返回。
我正在使用 打开一个串行端口CreateFile(FILE_FLAG_OVERLAPPED)
,使用 将其与 CompletionPort 关联,使用CreateIoCompletionPort()
读取/写入它ReadFile()
,WriteFile()
并使用 关闭它CloseHandle()
。
我注意到,如果我足够快地关闭并重新打开串行端口,我会ERROR_ACCESS_DENIED
从CreateFile()
. 尽管我正在等待CloseHandle()
返回,然后等待与该句柄关联的所有未完成的读/写操作从完成端口返回,但这种情况仍在发生。当然有更好的方法:)
如何同步关闭串口?请不要重试循环、sleep() 或其他一些廉价的黑客。
编辑:也许这与我使用完成端口和 FILE_FLAG_OVERLAPPED 有关。当读/写操作完成时,我会收到一个回调。端口关闭是否有某种回调?