C ++下的跨进程交互

时间:2011-03-08 00:12:06

标签: c++ windows interaction cross-process

请帮助,如何组织流程 - 流程数据交换(在Windows中,如果重要)?

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

任何解决方案都是有用的:WinApi或Qt。

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

5 个答案:

答案 0 :(得分:5)

OTOH:

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

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

答案 1 :(得分:4)

这里有很多选择:

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

答案 2 :(得分:3)

有几种方法:

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

问题在于Process2将进行广播,而Process1将进行监听。 Process1需要知道Process2何时完成,可能还有完成的百分比。

我认为套接字是更好的路径,但这取决于应用程序,开发时间表和对概念的熟悉程度。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

目前提出的选项中明显遗漏的是COM。我期待通常的“COM是废话”反应,但根据我的经验,情况并非如此。