Windows 处理等待所有引用被释放
Windows Handle wait until all references are released
我正在设计的 IPC 系统中有多个进程。每个进程创建一个FileMapping
和MapViewOfFile
作为自己的内存区域。此外,每个进程创建两个信号量来管理它已经创建的 FileMapping
和 MapViewOfFile
。
为了描述我遇到的问题,假设有 3 个进程:
ProcessA
创建 FileMapping
、MapViewOfFile
和两个信号量。
ProcessB
和 ProcessC
与 ProcessA
.
类似
ProcessA
想寄东西给 ProcessB
。它连接到 FileMapping
和 MapViewOfFile
以及 ProcessB
的两个信号量并发送它想发送的任何内容。
ProcessB
想重新开启通讯。它关闭了它的 FileMapping
和 MapViewOfFile
以及它的两个信号量。它向进程 A
和 C
发送关闭消息。当进程 A
和 C
收到关闭消息时,它们将关闭 FileMapping
、MapViewOfFile
的句柄以及与 ProcessB
关联的两个信号量。
ProcessB
关闭了所有句柄,想重新打开。当它尝试创建 MapViewOfFile
时失败,因为进程 A
和 C
尚未关闭 ProcessB
的句柄。
现在(作为临时修复),我让 ProcessB
在关闭时休眠 100 毫秒,以便进程 A 和 C 有时间关闭它们对 ProcessB
的句柄。但是,我想要一个不涉及睡眠的解决方案。
有没有办法让 ProcessB
知道何时 所有对其句柄的引用 s(FileMapping
、MapViewOfFile
和两个信号量) 是否被所有其他进程释放? 如果有,我如何等待它?
肯定没有 winapi 函数可以做到这一点。您只能尝试打开一个(命名的)对象的句柄并查看它是否因适当的原因而失败。
所以最简单的解决方法是用 Sleep(0)
或类似的东西在循环中做你想做的事情。您还可以为此特定目的添加一个额外的同步对象,一个自动重置的命名事件,您的 ProcessB
可以打开它并且 WaitFor....
.
我正在设计的 IPC 系统中有多个进程。每个进程创建一个FileMapping
和MapViewOfFile
作为自己的内存区域。此外,每个进程创建两个信号量来管理它已经创建的 FileMapping
和 MapViewOfFile
。
为了描述我遇到的问题,假设有 3 个进程:
ProcessA
创建FileMapping
、MapViewOfFile
和两个信号量。ProcessB
和ProcessC
与ProcessA
. 类似
ProcessA
想寄东西给ProcessB
。它连接到FileMapping
和MapViewOfFile
以及ProcessB
的两个信号量并发送它想发送的任何内容。ProcessB
想重新开启通讯。它关闭了它的FileMapping
和MapViewOfFile
以及它的两个信号量。它向进程A
和C
发送关闭消息。当进程A
和C
收到关闭消息时,它们将关闭FileMapping
、MapViewOfFile
的句柄以及与ProcessB
关联的两个信号量。ProcessB
关闭了所有句柄,想重新打开。当它尝试创建MapViewOfFile
时失败,因为进程A
和C
尚未关闭ProcessB
的句柄。
现在(作为临时修复),我让 ProcessB
在关闭时休眠 100 毫秒,以便进程 A 和 C 有时间关闭它们对 ProcessB
的句柄。但是,我想要一个不涉及睡眠的解决方案。
有没有办法让 ProcessB
知道何时 所有对其句柄的引用 s(FileMapping
、MapViewOfFile
和两个信号量) 是否被所有其他进程释放? 如果有,我如何等待它?
肯定没有 winapi 函数可以做到这一点。您只能尝试打开一个(命名的)对象的句柄并查看它是否因适当的原因而失败。
所以最简单的解决方法是用 Sleep(0)
或类似的东西在循环中做你想做的事情。您还可以为此特定目的添加一个额外的同步对象,一个自动重置的命名事件,您的 ProcessB
可以打开它并且 WaitFor....
.