c++跨进程通信

C++ communicate across processes

本文关键字:通信 进程 c++      更新时间:2023-10-16

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

我会查看共享内存。在MSDN上有一个很好的例子。

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

我想你是在为Windows编写代码。

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

客户端:这里是要处理的数据

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

命名管道还可以很容易地移植到其他点对点机制,如套接字或匿名管道。

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

既然其他人都假设Windows,我可以假设UcOs/II吗?使用消息邮箱。好吧,我想如果你用的是windows系统,一定会有类似的东西——快速谷歌搜索邮箱。

Microsoft对进程间通信的不同方法有一个非常全面的概述。

这篇文章解释了最常用方法的优缺点。其中

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

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