C++ 跨进程通信

Posted

技术标签:

【中文标题】C++ 跨进程通信【英文标题】:C++ communicate across processes 【发布时间】:2011-07-28 00:19:55 【问题描述】:

我有一个加载到多个进程中的 dll。 在这些进程/dll之间进行通信的干净方式是什么。 发送简单的字符串是目标。 我宁愿避免发送消息、文件 io 和发送字符串命令的地址。

【问题讨论】:

Windows 注册表?您可以在这里找到更多建议:***.com/questions/1008957/… 【参考方案1】:

我会调查shared memory。 MSDN 上有一个很好的example。

请记住,就像在同一进程中使用线程一样,对共享内存的访问不是序列化的。您需要某种形式的同步(例如命名互斥锁)来序列化对内存块的访问。

【讨论】:

另请参阅 DLL 如何创建共享内存作为 DLL 本身的一部分。 codeproject.com/KB/DLL/Share_memory_throuth_DLL.aspx【参考方案2】:

我假设您正在为 Windows 编写代码。

如果您的通信是进程之间的点对点通信,命名管道可能是最好的解决方案。您可以轻松地设计客户端/服务器样式的协议,例如:

客户:这是要处理的数据

服务器:这是处理您的请求的结果

命名管道还可以轻松移植到其他点对点机制,例如套接字或匿名管道。

如果您的通信不是点对点的,并且您需要在多个进程之间维护公共共享数据,那么 Andre 建议的内存映射文件是更好的选择,但肯定需要互斥锁保护才能可靠。

【讨论】:

【参考方案3】:

既然其他人都假设 Windows,我可以假设 UcOs/II 吗?使用消息邮箱。好的,我想如果你在 Windows 上,一定有类似的东西,一个快速的谷歌出现了Mailslots。

【讨论】:

【参考方案4】:

Microsoft 对进程间通信的不同方法进行了相当全面的概述。

The article 解释了最常用方法的优缺点。其中有

数据复制(消息传递) 文件映射(命名共享内存) 管道 远程过程调用 等等。

文章的每个部分都提供了指向进一步文档的链接,包括一些非常有用的代码示例

【讨论】:

以上是关于C++ 跨进程通信的主要内容,如果未能解决你的问题,请参考以下文章

Android跨进程通信

Android 跨进程通信-从源码分析AIDL跨进程通信实现

WPF怎么能跨进程通信

Android Framework实战开发视频--跨进程通信之Unix Socket通信

Android跨进程通信Binder机制与AIDL实例

Android跨进程通信Binder机制与AIDL实例