c++ - 使用重叠结构进行回调?

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

我有自己的重叠结构,用于使用 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);

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

关于c++ - 使用重叠结构进行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19194047/

相关文章:

java - AsyncResult 和 Futures 的结果存储在哪里/如何?

c++ - Windows 虚拟键代码

windows - 错误 : C stack usage is too close to the limit in Windows environment

c++ - 如何让 macdeployqt 在复制 QtWebEngineCore 框架时更改 QtWebEngineProcess.app 中的库名称

java - JNA:如何使用 CreateProcess 在 64 位系统中执行 32 位版本的系统 native 应用程序?

java - 从 Java Web Start (JNLP) 修改 Windows 防火墙规则

unit-testing - 我们如何使用angulardart中的测试包对异步函数进行单元测试?

c# - Entity Framework 、DBContext 和 using() + 异步?

c++ - 如何使用 GDAL C++ 从 shapefile 中删除特征?

c++ - 为什么我的输出总是 0.00?