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

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

【问题讨论】:

标签: c++ process communication


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

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

客户:这是要处理的数据

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        相关资源
        最近更新 更多