对于使用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实例,在该实例中,您返回的指针实际上将指向您的派生结构。

10-04 14:45