c - Windows - 在重叠 I/O 正在进行时调用 CloseHandle() 是否安全?
问题描述
我有一个程序,它有多个线程,需要使用相同的句柄(它用 FILE_SHARE_READ 打开)来写入。如果一个线程关闭句柄,而另一个线程当前正在进行 I/O(在我的例子中是 WriteFile),会发生什么?CloseHandle 是否会阻塞直到写入完成?
MSDN 文档在这个主题上似乎非常稀少。
解决方案
根据 I/O 完成的接近程度,它可以正常完成或被取消。或者,如果内核文件对象的使用计数不为零(例如DuplicateHandle()
已使用),则这些操作可以正常进行,直到另一个句柄也关闭。
CloseHandle()
可能会阻塞,但如果您真的想等待待处理 I/O 的完成(成功或取消),请在调用 OVERLAPPED 结构后等待事件 HANDLE CloseHandle()
。
推荐阅读
- python - 如何将属性从 SVG 复制到另一个?
- firebase - 如何在 Dialogflow 中的对话之间保存数据?
- amazon-redshift - 如何忽略错误,但不跳过 COPY 命令红移中的行?
- java - 如何模拟/存根 jOOQ UpdatableRecordImpl store() 方法?
- android - 使用 RootTools 获取 shell 命令的输出
- mysql - 如何在 phpmyadmin 中对已添加书签的 SQL 查询进行排序?
- wpf - 在多重绑定期间,多个命令参数值未传递给视图模型
- php - 加载资源失败:服务器响应状态为 500(内部服务器错误) - Angularjs 和 Codeigniter
- linux - scp上传文件是否需要执行权限?
- angular - 来自 http 服务的空响应