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 跨进程通信-从源码分析AIDL跨进程通信实现