winapi - 如果 CancelIo 失败怎么办?

标签 winapi asynchronous io cancelio

调用 CancelIo 的原因有很多,但在我的特定情况下,我调用它是为了知道系统不再写入缓冲区。一旦我知道了这一点,我就可以安全地释放缓冲区。

但是如果 CancelIo 失败怎么办?我现在所做的是显式泄漏缓冲区并引发异常。有没有更好的方法来处理这个问题?

附注对木卫二、木卫三和木卫四的类似呼唤似乎缺失了。我应该提交错误吗?

最佳答案

MSDN 文档对于可能返回哪些错误不是很清楚。我想(因为 CancelIo 无论如何都是异步的)这意味着您使用了错误的句柄,或者类似的主要内容。我所说的异步是指仅仅因为 CancelIo 返回 OK,您就无法立即释放任何待处理 I/O 的缓冲区。

文档中指出,挂起的 I/O 将返回 ERROR_OPERATION_ABORTED。我认为您已经跟踪挂起的 I/O 状态,这样当且仅当所有挂起的 I/O 返回此错误时,您才可以安全地释放缓冲区。如果待处理的 I/O 在 CancelIo 后仍处于挂起状态,则释放缓冲区可能会导致一系列不良副作用。

关于winapi - 如果 CancelIo 失败怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950314/

相关文章:

python - 如何使用 python 2.7 创建具有希伯来文名称的文件?

c++ - 什么可能导致两个相同的后续 SetWindowPos() 调用设置不同的窗口大小?

flutter - Flutter(Dart)中如何在执行另一个方法后执行一个方法

node.js - 使用 Mongoose 和 FeedParser 跟踪 Node.js 中的多个回调何时完成

javascript - NodeJs + Mongo db 无法等待结果

java - 使用 java 写入文件时输出无效

http.Get() 从 url 获取图像并写入 GridFS

c++ - 使用 WINAPI 如何更改复选框按钮的值?

winapi - 使用 windows sdk 7 构建 hadoop 2.5.1 失败

c++ win32从编辑框中隐藏(禁用)插入符号