gpt4 book ai didi

c++ - 通过两个不同的可执行文件进行 IPC?

转载 作者:行者123 更新时间:2023-11-30 04:10:40 25 4
gpt4 key购买 nike

我有以下问题,我知道我需要通过共享内存或网络套接字使用 IPC。

我有一个可执行文件(意思是一个单独的 .exe),用 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 Studio 版本编译两个可执行文件不是一种选择,一个代码库只能用 VS2010 编译,另一个只能用 VS2012/2013 编译。

然而,我第一次尝试使用 boost::interprocess 没有成功(第二个进程抛出一个 boost::interprocess::interprocess_exception),而且我不完全理解内存是如何共享的,或者更准确地说,共享内存信息如何从一个进程传递到另一个进程。第一个exe如何填充共享内存块的信息?它只适用于一个 可执行文件中的多个进程吗?不是多个.exe?它是否必须是两个可执行文件使用的同一个 boost DLL?我唯一的选择是通过套接字进行 IPC 吗?

最佳答案

IPC 适用于两个不同的可执行文件。访问共享内存的两个进程不需要编译成同一个可执行文件。事实上,它们可以用不同版本的 visual studio 和不同的 boost DLL 编译。但是,必须在两个可执行文件中使用相同的 版本 boost。

非常有趣的是,同样不起作用的是,在发布构建中运行一个可执行文件,在调试构建中运行另一个可执行文件。我猜他们以完全不同的方式分配内存并且无法共享它。

关于c++ - 通过两个不同的可执行文件进行 IPC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20552829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com