2015-08-28 60 views
0

我有一个应用程序A,我想与应用程序B分享一些信息。 应用程序每个写入信息〜150ms。 应用程序B随时读取信息。QsharedMemory没有Qt应用程序

我搜索了一下,发现QSharedMemory,看起来不错,但是我的公司不开发应用程序B,所以我不能选择编程语言。

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

+0

如果您对应用程序B的开发没有任何控制/输入,您可以将自己的部分编写成任何你想要的东西,但是你通常需要提供某种类型的文档或至少一个结构内存被读入(如果不是API)。就我个人而言,我会使用其他类似增强功能的东西,并提供一个读取数据的库。无论如何,如果他们是客户。这就是说,在一天结束时,它是RAM中的字节......读者可以实现他们想要的东西。但它可能不是最好的方法。 –

回答

0

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

我想知道这是否会更容易,但是,如果你使用IPC管道。 QLocalSocket封装在Qt的末尾,另一侧只是使用本地管道。

只有在某些情况下,共享内存才有意义,比如推送图像,这些图像在应用程序之间可能不会发生太大变化 - 从小到大,整个图像的推动成本会受到限制平均带宽的变化。图像不需要意味着视觉图像,它可能是一个工业过程映像等。

在很多情况下,共享内存是一种过早的伪优化,它使事情变得比必要的困难得多,并且可以大量沟通过程的情况下,变得悲观化 - 您为每个共享内存段支付虚拟内存的成本。

0

听起来你需要实现一个简单的服务器,使用本地套接字,它应该是非常快的带宽和易于开发。服务器将采取行动存储来自A的数据并根据请求将其传送给B.

显然,它不会在“无应用程序”之间工作。无论您是使用共享内存还是本地套接字,您都需要一些服务器代码来随时运行,以便为A和B服务。如果A一直在运行,它可能是其中的一部分,但它也可以是独立。

最好是使用本地套接字,因为它的API在不同的编程语言中更具可移植性,在这种情况下,A和B可以用任意语言和框架实现,并在套接字协议层进行通信。使用QSharedMemory它不会在您的场景中具有便携性。