是否可以恢复在挂起的I/O操作中使用的已分配的OVERLAPPED结构?
假设您正在ReadDirectoryChangesW使用 I/O 完成端口执行异步操作(如)。对于每次调用该函数,您分配一个OVERLAPPED结构(可能带有一些附加数据)以在 I/O 完成回调中使用。然后在回调中,在使用OVERLAPPED结构后,您使用作为参数提供的指针释放内存。
现在让我们说是时候关闭一切并取消任何挂起的异步调用了。是否有可以调用的函数来检索指向OVERLAPPED任何当前挂起的 I/O 操作中使用的结构的指针,以便您可以释放内存?
回答
是否有可以调用的函数来检索指向任何当前挂起的 I/O 操作中使用的 OVERLAPPED 结构的指针
不,那里没有。跟踪分配的OVERLAPPEDs是您的责任。
但是,当您取消异步 I/O 操作时,您仍会收到它的完成通知,表明请求的操作已中止。因此,如果您只是简单地分配OVERLAPPEDs 并将它们传递给 IOCP 而没有跟踪它们,那么您可以像往常一样继续在通知处理程序中释放它们的内存。在您收到每个挂起的 I/O 操作的完成通知之前,不要完全关闭。