C++下的跨进程交互

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

奥托:

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

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

【讨论】:

【参考方案2】:

这里有很多选择:

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

【讨论】:

【参考方案3】:

有几种方法:

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

+1。在 COM 的扩展中,还有跨计算机的 DCOM(这也是 IPC 的一种形式)。

以上是关于C++下的跨进程交互的主要内容,如果未能解决你的问题,请参考以下文章

Android跨进程通信

Android 跨进程通信-从源码分析AIDL跨进程通信实现

C++ 命名管道 与Winform跨进程通信

Android四大组件——Service后台服务前台服务IntentService跨进程服务无障碍服务系统服务

Android跨进程通信Messenger

Binder的使用(跨进程——AIDL,非跨进程)