首页 > 解决方案 > Windows - 在重叠 I/O 正在进行时调用 CloseHandle() 是否安全?

问题描述

我有一个程序,它有多个线程,需要使用相同的句柄(它用 FILE_SHARE_READ 打开)来写入。如果一个线程关闭句柄,而另一个线程当前正在进行 I/O(在我的例子中是 WriteFile),会发生什么?CloseHandle 是否会阻塞直到写入完成?

MSDN 文档在这个主题上似乎非常稀少。

标签: cwindowshandlemsdnwritefile

解决方案


根据 I/O 完成的接近程度,它可以正常完成或被取消。或者,如果内核文件对象的使用计数不为零(例如DuplicateHandle()已使用),则这些操作可以正常进行,直到另一个句柄也关闭。

CloseHandle()可能会阻塞,但如果您真的想等待待处理 I/O 的完成(成功或取消),请在调用 OVERLAPPED 结构后等待事件 HANDLE CloseHandle()

很好的附加信息:https ://community.osr.com/discussion/213975


推荐阅读