C++ 不使用Qt应用程序的QsharedMemory

C++ 不使用Qt应用程序的QsharedMemory,c++,qt,qsharedmemory,C++,Qt,Qsharedmemory,我有一个应用程序A,我想与应用程序B共享一些信息。 应用程序A每150毫秒写入一次信息。 应用程序B可以随时读取信息 我搜索并找到了QSharedMemory,它看起来很棒,但是应用程序B不是我的公司开发的,所以我不能选择编程语言 QSharedMemory是个好主意吗? 我该怎么做呢?QSharedMemory是一个围绕命名和未命名平台共享内存的薄包装器。命名时,只要该语言支持二进制缓冲区,其他应用程序就可以从任何编程语言映射并使用一个文件 我真的很想知道,如果你用一根管子来做IPC,会不会更

我有一个应用程序A,我想与应用程序B共享一些信息。 应用程序A每150毫秒写入一次信息。 应用程序B可以随时读取信息

我搜索并找到了QSharedMemory,它看起来很棒,但是应用程序B不是我的公司开发的,所以我不能选择编程语言

QSharedMemory是个好主意吗? 我该怎么做呢?

QSharedMemory是一个围绕命名和未命名平台共享内存的薄包装器。命名时,只要该语言支持二进制缓冲区,其他应用程序就可以从任何编程语言映射并使用一个文件

我真的很想知道,如果你用一根管子来做IPC,会不会更容易。QLocalSocket封装了Qt端的管道,而另一端只使用本机管道

共享内存只有在某些情况下才有意义,例如,在应用程序之间推送可能不会有太大变化的图像——鉴于平均带宽变化很小,因此一直推送整个图像的成本非常高昂。图像不需要表示视觉图像,它可以是工业过程图像等


在许多情况下,共享内存是一种过早的伪优化,使事情变得比必要的困难得多,并且在有大量通信进程的情况下,可能会变得悲观-您确实需要为每个共享内存段支付虚拟内存成本。

听起来您需要实现一个简单的服务器,使用本地套接字,它在带宽方面应该非常快,并且易于开发。服务器将存储来自A的数据,并根据请求将其传递给B

显然,如果中间没有应用程序,它将无法工作。无论您选择共享内存还是本地套接字,您都需要一些服务器代码来随时运行,以便为a和B提供服务。如果a一直在运行,它很可能是它的一部分,但也可以是独立的


最好使用本地套接字,因为用于本地套接字的API在不同编程语言之间更具可移植性,在这种情况下,a和B可以在任意语言和框架中实现,并在套接字协议级别进行通信。有了QSharedMemory,它在您的场景中就没有那么好的可移植性。

如果您对应用程序B的开发没有控制/输入,您可以用任何您想要的方式编写您的部分,但是您通常需要提供某种类型的文档,或者如果不是API的话,至少需要提供一种读取内存的结构。就我个人而言,我会使用类似boost的其他工具,并提供一个进行阅读的库。如果他们是客户的话。这是一个很长的说法,在一天结束时,它是RAM中的字节。。。读者可以实现他们想要的。但这可能不是最好的办法。