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 跨进程通信-从源码分析AIDL跨进程通信实现