我需要一种方法来暂时将某个值存储在某个地方。比如进程A.进程A可以在将值存储在内存中之后退出。过了一段时间后,进程B访问内存的相同位置并读取值。我需要存储在内存中,因为我不希望数据在重新启动后保持不变。但只要系统启动,它就独立于进程,数据必须是可访问的。我在Windows中尝试了MailSlots和Temporary文件,两者似乎都有问题,其中进程引用计数降为零,实体不会持久存储在内存中。在Windows中,优选使用Win32 API的适当机制是什么?
答案 0 :(得分:4)
编写在引导时启动的服务,并让它创建一些共享内存。 然后,进程A可以填充此共享内存,然后进程B可以读取它。
如果您的系统重新启动,共享内存将消失,您将拥有一块全新的共享内存。 确保您的服务正确“初始化”共享内存。
答案 1 :(得分:1)
当ProcessA退出而不是存储在磁盘上的某个位置时,是否有必要将数据驻留在内存中的原因?我问你提到的临时文件应该有效,除非ProcessA以意想不到的方式失败。
根据您的需要,通过ESENT API提供共享/快速/原子数据的好方法。
答案 2 :(得分:0)
尝试以下方法。我不能说我知道这有效,但似乎是合理的。
使用OpenFileMapping在全局命名空间中创建共享内存文件。然后调用Duplicatehandle并且对于目标进程句柄使用一些比进程A更长寿的进程。您可以将句柄添加到winlogon.exe这将阻止共享内存在进程A终止时被销毁。然后在进程B中,您可以查找共享内存文件。
答案 3 :(得分:0)
好吧,我设法在一个不会退出的进程上创建一个MailSlot,另外两个进程可以作为客户端读取和写入MailSlot服务器......即使客户端退出,Mailslot仍然会有数据。 .. MailSlot服务器使我能够将数据存储在易失性存储器中,只要MailSlot服务器进程已启动..或操作系统已启动...并在操作系统重启时消失...感谢所有的想法和帮助.... :)