【问题标题】:QsharedMemory with no Qt application没有 Qt 应用程序的 QsharedMemory
【发布时间】:2015-11-23 04:36:58
【问题描述】:

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

我搜索发现QSharedMemory,看起来不错,但是应用B不会是我公司开发的,所以无法选择编程语言。

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

【问题讨论】:

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

标签: c++ qt qsharedmemory


【解决方案1】:

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

我确实想知道,如果您将管道用于 IPC,会不会更容易。 QLocalSocket 封装在 Qt 的一端,而另一端只是使用原生管道。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多