Windows句柄等待所有引用都被释放

时间:2017-12-14 22:24:02

标签: winapi ipc wait handle

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

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

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

  2. ProcessBProcessCProcessA类似。

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

  4. ProcessB想重新开启其沟通。它关闭了FileMappingMapViewOfFile及其两个信号量。它向流程AC发送结束消息。当流程AC收到结束消息时,他们会关闭FileMappingMapViewOfFile和与ProcessB相关联的两个信号量的句柄。

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

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

    ProcessB是否有办法知道何时对其句柄的所有引用FileMappingMapViewOfFile和两个信号量)所有其他流程发布了什么?如果有,我该怎么办?

1 个答案:

答案 0 :(得分:1)

这样做肯定没有winapi功能。您只能尝试打开(命名)对象的句柄,并查看它是否因适当的原因而失败。

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