对于那些熟悉进程间通信的人,我有一个快速的问题。通过内存共享C++对象
形势
- 我有一个计划(方案一),我可以添加一些代码,但非常有限。这是生成大量数据的主要程序。
- 数据的表达方式是有限的,所以我想创建第二个程序(程序B),因此需要从A到B获取数据。甚至有时会导致A运行一些没有返回值的函数。
- 我知道命名管道,但我觉得他们可能会体积庞大? - 不知道 - 我有例如以下问题(可能没有根据):
- 数据流=>转换为二进制 - >将数据放在内存中 - >服务器读取 - >转换为字符串 - >通过可能是一个开关语句确定请求 - >获取请求 - >转换为二进制 - >在内存中放置 - >由客户端读取并转换为字符串/一些可接受的格式。
- 它必须基本上使用双方的开关语句,如果你想要一个不同于字符串的信息格式,你需要考虑这一点
- 一条消息可能要等待另一条消息完成,所以它在同一时间的很多电话中可能会更慢? - 不确定
- 其他进程间通信方法可能有同样的问题。
更好的解决方案我认为会创建一个“对象”类。与程序之间共享对象的内存地址,从而在理论上“合并” A和B,则:
- 没有与编码和解码的问题等
- 数据只是要求没有问题/通过调用一个函数调用。
- 函数返回正确的类型,也不需要建立正确的类型是什么(即布尔/ INT /串/双等)
我明白,这也有几个问题,即,如果对象被删除从内存位置由主/另一个程序访问它。
问题
- 什么是解决这一问题的最佳途径:
- 是否有在C++中调用的选项,让我写和从存储器地址读?此刻:
- 我可以访问A和B之间的同一个对象,但是我不能写/读,因为这会抛出异常。那么基本上我可以通过简单的调用或者读写这个对象吗?
- 我知道WriteProcessMemory函数 - 但这不是我想要的 - 即我不一定要更改内存值,只是访问数据/调用B将执行的操作。
- 有没有一个简单而简单的方法呢?我知道一些叫做boost的东西,但是对它不了解 - 这是我最好的选择吗? - >即我应该调查这是我最好的解决方案吗?
非常感谢您对此问题的任何建议。
*“我知道一些叫做boost的东西”*。好。但最好的办法是使用它:http://boost.org。而且......惊喜!有些东西可以帮助你解决问题:[Boost.Interprocess](http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html) –
你可以通过管道发送二进制数据就好了。实际上,对于操作系统而言,通过管道的东西是一个原始的字节流。但是你想使用正确的序列化格式。 “Cap'n Proto”如何对您的情况有好处,那么线格式与内存中的数据相同。 – datenwolf