使用重叠结构进行回调?

时间:2013-10-05 04:40:34

标签: c++ windows asynchronous overlapped-io io-completion-ports

我有自己的重叠结构,用于使用IO完成端口的异步IO。

现在我收到读/写完成的通知。我可以将CALLBACK函数作为重叠结构中的参数传递吗?

这将允许我根据我传递的重叠结构的类型指定各种回调函数

有人有运气吗?

1 个答案:

答案 0 :(得分:4)

创建自己的OVERLAPPED

派生结构
struct MyOverlapped : OVERLAPPED
{
  CALLBACK MyCallback;
};

现在改用:

MyOverlapped *o=new MyOverlapped;
o->MyCallback=CallbackHandler;

WriteFile(..,..,MyOverlapped);

然后,当您获得OVERLAPPED后,您可以将其转换为派生版本:

MyOverlapped *o=static_cast<MyOverlapped*>(overlapped);

现在您可以访问回调。我猜你从OVERLAPPED调用了GetQueuedCompletionStatus实例,你回来的指针实际上会指向你的派生结构。