2

假设您正在ReadDirectoryChangesW使用 I/O 完成端口执行异步操作(如 )。对于函数的每次调用,您都会分配一个OVERLAPPED结构(可能带有一些额外的数据)以在 I/O 完成回调中使用。然后在回调中,在使用OVERLAPPED结构后,使用作为参数提供的指针释放内存。

现在让我们说是时候关闭一切并取消任何挂起的异步调用了。是否可以调用一个函数来检索指向OVERLAPPED在任何当前挂起的 I/O 操作中使用的结构的指针,以便释放内存?

4

1 回答 1

5

是否可以调用一个函数来检索指向在任何当前挂起的 I/O 操作中使用的 OVERLAPPED 结构的指针

不,那里没有。跟踪分配OVERLAPPED的 s 是您的责任。

但是,当您取消异步 I/O 操作时,您仍会收到它的完成通知,指示请求的操作已中止。因此,如果您只是分配您OVERLAPPED的 s 并将它们传递给 IOCP 而不跟踪它们,那么您可以像往常一样继续在通知处理程序中释放它们的内存。在您收到待处理的每个 I/O 操作的完成通知之前,不要完全关闭。

于 2021-07-20T23:16:48.430 回答