我有一个应用程序A,我想与应用程序B共享一些信息。应用程序A每隔大约150ms写入信息。应用程序B随时读取信息。
我搜索并找到了QSharedMemory,它看起来很棒,但应用程序B不是由我的公司开发的,所以我不能选择编程语言。
QSharedMemory是个好主意吗?我该怎么做呢?
发布于 2015-08-29 01:28:32
QSharedMemory是一个围绕已命名和未命名平台共享内存的薄包装器。命名时,只有一个文件可供其他应用程序进行内存映射,并从任何编程语言中使用,只要该语言支持二进制缓冲区。
不过,我想知道,如果您使用管道进行IPC,是否会更容易一些。QLocalSocket将其封装在Qt的一端,而另一端则简单地使用本机管道。
共享内存只有在某些情况下才有意义,比如在应用程序之间推送可能不会有太大变化的图像-在这种情况下,始终推送整个图像的成本将是令人望而却步的,因为更改的平均带宽很小。该图像不需要表示视觉图像,它可以是工业过程图像,等等。
在许多情况下,共享内存是一种过早的伪优化,它使事情变得比必要的困难得多,并且在大量通信进程的情况下,可能会变得悲观-您确实要为每个共享内存段在虚拟内存中付出代价。
发布于 2015-08-29 04:18:48
听起来你需要实现一个简单的服务器,使用本地套接字,它应该在带宽方面相当快,并且易于开发。服务器将存储来自A的数据,并根据请求将其传送到B。
显然,它不会在“没有应用程序”的情况下工作。无论是共享内存还是本地套接字,您都需要一些服务器代码来始终运行服务A和B。如果A一直在运行,那么它很可能是它的一部分,但也可以是独立的。
最好使用本地套接字,因为它的API在不同的编程语言之间更容易移植,在这种情况下,A和B可以在任意语言和框架中实现,并在套接字协议层进行通信。有了QSharedMemory,它在您的场景中就不会像以前那样可移植了。
https://stackoverflow.com/questions/32272355
复制相似问题