调用 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/