You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WriteFile同步完成(成功/失败)时是否触发lpOverlapped参数指定事件?

关于WriteFile同步执行时重叠事件的触发情况

我之前也纠结过这个点,查了不少内部文档和做过实际测试,给你梳理清楚:

当你用FILE_FLAG_OVERLAPPED打开文件句柄后,lpOverlapped里的事件本质是为异步挂起的IO操作服务的——只有当WriteFile返回FALSE且GetLastError()返回ERROR_IO_PENDING(操作进入异步队列等待完成)时,系统才会在操作结束时触发这个事件。针对你问的两种同步场景:

  • 同步执行成功时:如果WriteFile直接返回TRUE,说明操作已经同步完成,系统不会触发你传入的重叠事件。毕竟同步完成的结果已经通过返回值直接告知,没必要再用事件多此一举。
  • 同步执行失败时:如果WriteFile返回FALSE,但GetLastError()不是ERROR_IO_PENDING(也就是操作同步失败,根本没进入异步调度),这种情况系统同样不会触发重叠事件。因为操作连执行队列都没进,自然不会有后续的事件触发逻辑。

要是你想验证的话,可以手动创建一个初始未触发的手动重置事件,在同步成功/失败后调用WaitForSingleObject检查事件状态,会发现它始终保持未触发的状态。

内容的提问来源于stack exchange,提问作者tcb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:50:16