0

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

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

QSharedMemory个好主意吗?我怎样才能做到这一点 ?

4

2 回答 2

0

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

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

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

于 2015-08-28T20:18:47.767 回答
0

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

不过,我确实想知道如果您使用管道进行 IPC 是否会更容易。QLocalSocket封装在 Qt 的一端,而另一端只是使用本机管道。

共享内存仅在某些情况下才有意义,例如,推送可能不会在应用程序之间发生太大变化的图像 - 鉴于平均带宽较小,一直推送整个图像的成本将令人望而却步变化。图像不一定是视觉图像,它可以是工业过程图像等。

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

于 2015-08-28T17:28:32.013 回答