对于使用IO完成端口的异步IO,我有自己的重叠结构。
现在我得到读/写完成的通知。我可以在重叠结构中将CALLBACK函数作为参数传递吗?
这将允许我根据传递的重叠结构的类型指定各种回调函数
有人有运气吗?
最佳答案
创建您自己的源自OVERLAPPED
的结构:
struct MyOverlapped : OVERLAPPED
{
CALLBACK MyCallback;
};
现在改用这个:
MyOverlapped *o=new MyOverlapped;
o->MyCallback=CallbackHandler;
WriteFile(..,..,MyOverlapped);
然后,当您取回
OVERLAPPED
时,可以将其转换为派生版本:MyOverlapped *o=static_cast<MyOverlapped*>(overlapped);
现在,您可以访问回调了。我猜您是从对
OVERLAPPED
的调用中获取了GetQueuedCompletionStatus
实例,在该实例中,您返回的指针实际上将指向您的派生结构。