Windows 句柄等待,直到释放所有引用



我正在设计的IPC系统中有多个进程。每个进程都会创建一个FileMappingMapViewOfFile作为自己的内存区域。此外,每个进程都会创建两个信号量,用于管理已创建的FileMappingMapViewOfFile

为了描述我遇到的问题,假设 3 个过程:

  1. ProcessA创建FileMappingMapViewOfFile和两个信号量。

  2. ProcessBProcessC做类似于ProcessA

  3. ProcessA想向ProcessB发送一些东西.它连接到FileMappingMapViewOfFile以及ProcessB的两个信号量,并发送它想要发送的任何内容。

  4. ProcessB希望重新开放其通信。它关闭其FileMappingMapViewOfFile及其两个信号量。它将结束消息发送到进程AC。当进程AC收到关闭消息时,它们将关闭FileMappingMapViewOfFile和与ProcessB关联的两个信号量的句柄。

  5. ProcessB关闭了所有的把手,想要重新打开。当它尝试创建MapViewOfFile时,它会失败,因为进程AC尚未关闭句柄以ProcessB

现在(作为临时修复),我让ProcessB在关闭时休眠 100 毫秒,以便让进程 A 和 C 有时间关闭它们的句柄以ProcessB。但是,我想要一个不涉及睡眠的解决方案。

有没有办法让ProcessB知道所有其他进程何时释放对其句柄s(FileMappingMapViewOfFile和两个信号量)的所有引用?如果有,我怎么能等呢?

绝对没有 winapi 函数来做到这一点。只能尝试打开(命名)对象的句柄,并查看它是否因适当的原因而失败。

因此,最简单的解决方法是使用Sleep(0)或类似的东西执行您在循环中尝试的操作。您还可以为此特定目的添加其他同步对象,即您的ProcessB可能会打开并WaitFor....的自动重置命名事件。

最新更新