【问题标题】:What is the best way for two programs on the same machine to communicate with each other同一台机器上的两个程序相互通信的最佳方式是什么
【发布时间】:2009-12-04 17:53:31
【问题描述】:

我需要将一些数据(整数)从一个 (C++) 程序传递到另一个 (C#)。最快的方法是什么?

P.S.:操作系统:Windows XP

【问题讨论】:

  • 答案在 Windows 上可能与基于 Unix 的不同,并且 C# 在 Windows 以外的操作系统上运行良好。你为什么不指定你的操作系统?

标签: c# c++ ipc communication


【解决方案1】:

鉴于您同时使用 C++ 和 C#,并且它在同一个系统上,我个人对此的偏好是使用 Pipes。

它们在native code (C++) 以及通过NamedPipeClientStreamNamedPipeServerStream 的C# 中运行良好。

但是,Interprocess Communication 还有其他选项,其中任何一个都可以。

【讨论】:

  • 我认为您的意思是命名管道,而不是管道。管道和命名管道是不同的 IPC 机制。
  • 管道包括命名管道和匿名管道。从技术上讲,如果一个进程正在启动另一个进程,您可以使用匿名管道,否则,您需要命名管道。不过,从技术上讲,两者都是“管道”。来自 MS:“有两种类型的管道......”,请参阅:msdn.microsoft.com/en-us/library/aa365137(VS.85).aspx
【解决方案2】:

共享内存将是最快的,但命名管道也非常快且更易于使用。

【讨论】:

    【解决方案3】:

    查看this article 了解可用选项的概要。您最好的选择可能是pipe

    【讨论】:

    • 请将“tinyurl”地址替换为实际地址。
    • 我就不和你吵架了……哈哈抱歉
    • @cic:搞定了。抱歉 - 它包含括号,打乱了格式,而且我还没有记住转义码。
    【解决方案4】:

    使用文件是最简单的方法。如果您需要速度,那么网络套接字可能是一个不错的选择。

    【讨论】:

    • 邮槽基本上是一个文件,但只能用于单向通信。
    【解决方案5】:

    如果您的通信是单向的并且您的消息很小,则可以使用邮槽。否则,我建议使用命名管道(正如其他人所建议的那样)。

    mailslots 上有些东西

    All IPC mechanisms

    【讨论】:

      【解决方案6】:

      以防万一它有帮助,如果这不是关键的进程间通信(如果你需要的功能可以被塑造成一个 DLL 两者都使用或类似的)你可以使用公共语言运行时进行互操作性。

      【讨论】:

        【解决方案7】:

        我的建议是 Sockets 或 RPC。我不熟悉管道,但它似乎也是一个流行的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          相关资源
          最近更新 更多