首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过两个不同的可执行文件的IPC?

通过两个不同的可执行文件的IPC?
EN

Stack Overflow用户
提问于 2013-12-12 19:47:54
回答 2查看 551关注 0票数 1

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

我有一个用VS2010编译的可执行文件(意思是一个单独的VS2010),它可以从某个地方获取数据,并且应该使第二个可执行文件可以使用这些数据。

代码语言:javascript
运行
复制
boost::interprocess::managed_shared_memory managed_shm(
    boost::interprocess::open_or_create,
    "MyMemBlock",
    4000000);

第二个可执行文件是用VS2012编译的,应该接收该数据(或从内存中获取)并对其进行处理。

代码语言:javascript
运行
复制
// 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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 17:31:08

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

有趣的是,同样不起作用的是,在版本构建中运行一个可执行文件,在调试-构建中运行另一个可执行文件。我想他们分配内存的方式完全不同,不能共享它。

票数 2
EN

Stack Overflow用户

发布于 2013-12-12 20:01:07

您可以尝试本机Windows。有很多你可以谷歌他们。我推荐内存映射文件。这里还有一篇来自女士的好文章

例如,这是非持久化内存映射文件的场景。

  1. 进程A创建内存映射文件并向其写入值.2.进程B打开内存映射文件并向其写入一个值。3.进程C打开内存映射文件并向其写入一个值。4.进程A从内存映射文件中读取和显示值.5.进程A完成内存映射文件后,垃圾回收立即回收该文件。

取自这里

Boost也有内存映射文件的实现,它将根据编译目标平台使用本地的低级API。示例代码可以采用这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20552829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档