【问题标题】:Cross-process interaction under C++C++下的跨进程交互
【发布时间】:2011-03-08 00:12:05
【问题描述】:

请帮忙,我该如何组织流程-流程数据交换(在 Windows 中,如果重要的话)?

我有process1.exe,它使用一些命令行参数调用process2.exe。我想从process1 跟踪process2 的“进度”(比如,一些int 值)。它(int 值)可以从 process1 永久或每 X 毫秒访问 - 没关系。

对任何解决方案都很有用:WinApi 或 Qt。

谢谢大家!所有答案都非常有用! :) 非常感谢!!

【问题讨论】:

    标签: c++ windows interaction cross-process


    【解决方案1】:

    奥托:

    • stdin/stdout 重定向
    • 命名管道 (CreateNamedPipe)
    • 匿名管道 (CreatePipe)
    • 套接字(套接字、连接、绑定)
    • 共享内存(CreateFileMapping、MapViewOfFile)
    • Windows 消息(例如 WM_APP)

    选择一个 - Windows 消息或共享内存可能更容易。

    【讨论】:

      【解决方案2】:

      这里有很多选择:

      1. 您可以重定向 process2 的标准输出并让它输出更新,无论您喜欢什么频率
      2. 如果标准输出用于其他用途,您可以在进程之间使用named pipe
      3. 您也可以使用named shared memory,这将需要更少的开销并且可能更容易实现(缺点是您可能还需要进行跨进程同步)
      4. 如果 process1 正在运行消息泵,那么您也可以使用普通的 Windows 消息(查看 WM_COPYDATA)

      【讨论】:

        【解决方案3】:

        有几种方法:

        • 套接字
        • 消息
        • 共享内存(文件)

        问题是 Process2 将广播而 Process1 将监听。 Process1 需要知道 Process2 何时完成以及完成的百分比。

        我相信套接字会是更好的途径,但这取决于应用程序、开发计划和概念的熟悉程度。

        【讨论】:

          【解决方案4】:

          您可以简单地使用 Windows Api (SendMessage) 发送消息。

          【讨论】:

            【解决方案5】:

            到目前为止提供的选项中一个明显的遗漏是 COM。我期待通常会出现“COM 是垃圾”的回应,但根据我的经验,情况并非如此。

            【讨论】:

            • +1。在 COM 的扩展中,还有跨计算机的 DCOM(这也是 IPC 的一种形式)。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-16
            • 1970-01-01
            • 1970-01-01
            • 2016-03-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多