如何在Windows上用C++等待回调响应

问题描述 投票:0回答:1

我正在使用

ExNotifyCallback
函数从一个组件向另一个组件发出信号。有多个实例正在监听此 CB,只有正确的实例才会做出响应。响应通过单独的函数指针接口进行调用来实现:

void (*pfnResponseFunc)(void*pData, int* pDataSize)

我想发出 ExNotifyCallback,然后等待通过 pfnResponseFunc 的响应。

函数中发生的代码流程:

// Send message to listeners:
ExNotifyCallback(myCbObject, pIn1, pIn2);

// Wait (with timeout) for pfnResponseFunc to get called...
if (responseFound)
{
   // read pData that showed up in pfnResponseFunc, return success
}
else
{
   // return failure
}

我希望它在同一函数中专门等待固定超时。在 Windows 中是否有典型的方法来执行此操作?

c++ winapi device-driver
1个回答
0
投票

基本解决方案有两部分:

  1. 我想我通常会使用事件来实现这个目的,在多个组件之间发出信号。

  2. 然后,您的组件可以使用 WaitForSingleObject 等待事件,该事件在 MS 中有超时。

但是您在这里遗漏了很多细节。

  • 您希望信号如何表现,即。手动休息、脉搏?
  • 您将如何在流程之间共享您的事件?这是一个命名事件吗?一个进程是否将事件句柄复制到其他进程?
  • 进程的线程模型是什么?一般来说,我会使用线程池来处理这类事情。有 TP 等待,这对于等待事件很有用,还有 TP 计时器,可以用于超时......等等。

无论如何,您可以使用多种并发模式,具体取决于您想要执行的操作,但使用事件和线程池是典型的实现方式。

© www.soinside.com 2019 - 2024. All rights reserved.