我有以下问题,我知道我需要通过共享内存或网络套接字使用IPC。
我有一个用VS2010编译的可执行文件(意思是一个单独的VS2010),它可以从某个地方获取数据,并且应该使第二个可执行文件可以使用这些数据。
boost::interprocess::managed_shared_memory managed_shm(
boost::interprocess::open_or_create,
"MyMemBlock",
4000000);
第二个可执行文件是用VS2012编译的,应该接收该数据(或从内存中获取)并对其进行处理。
// fails with a boost::interprocess::interprocess_exception
boost::interprocess::managed_shared_memory managed_shm(
boost::interprocess::open_only,
"MyMemBlock");
整件事需要尽可能快。用相同的Visual版本编译两个可执行文件是而不是的一个选项,一个代码库仅用VS2010编译,另一个仅用is 2012/2013编译。
但是,我第一次尝试boost::interprocess没有工作(第二个进程抛出一个boost::interprocess::interprocess_exception),我也不完全理解内存是如何被共享的,或者更准确地说,共享内存信息是如何从一个进程传递到另一个进程的。第一个exe如何填充共享内存块的信息?它是否只适用于一个可执行文件中的多个进程?不是多个..exe的?它必须是两个可执行文件使用的相同的boost DLL吗?我唯一的选择是通过Socket的IPC吗?
发布于 2013-12-13 09:31:08
IPC跨两个不同的可执行程序工作。访问共享内存的两个进程不需要编译到同一个可执行文件中。事实上,它们可以用不同版本的visual studio和不同的boost DLL进行编译,但是,在两个可执行文件中都必须使用相同版本的boost。
有趣的是,同样不起作用的是,在版本构建中运行一个可执行文件,在调试-构建中运行另一个可执行文件。我想他们分配内存的方式完全不同,不能共享它。
https://stackoverflow.com/questions/20552829
复制相似问题