C++下的跨进程交互

发布于 2024-10-20 15:50:57 字数 342 浏览 5 评论 0原文

请帮忙,我如何组织进程间数据交换(在 Windows 中,如果这很重要)?

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

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

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

Please help, how can I organize the process-process data exchange (in Windows, if that matters)?

I have process1.exe which calls process2.exe with a few command line arguments. I want to track "progress" of process2 from process1 (say, some int value). It (that int value) can be accessed from process1 permanently or each X ms - doesn't matter.

Will be useful any solution: WinApi or Qt.

Thank you everybody! All answers are very useful! :) Many thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

榆西 2024-10-27 15:50:57

OTOH:

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

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

OTOH:

  • stdin/stdout redirection
  • Named pipe (CreateNamedPipe)
  • Anonymous pipe (CreatePipe)
  • Sockets (socket, connect, bind)
  • Shared memory (CreateFileMapping, MapViewOfFile)
  • Windows messages (e.g. WM_APP)

Pick one - Windows messages or shared memory may be the easier ones.

溇涏 2024-10-27 15:50:57

这里有很多选项:

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

There are many options here:

  1. You can redirect the standard output of process2 and have it output updates however often you like
  2. If stdout is being used for something else, you can use a named pipe between the processes
  3. You can also use named shared memory, which will require less overhead and probably be easier to implement (the downside is that you may need to also do cross-process synchronization)
  4. If process1 is running a message pump, then you can also use normal Windows messages (look at WM_COPYDATA)
回心转意 2024-10-27 15:50:57

有几种方法:

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

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

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

There are several methods:

  • Sockets
  • Messages
  • Shared Memory (files)

The issue is that Process2 will be broadcasting and Process1 will be listening. Process1 will need to know when Process2 is finished and maybe the percentage complete.

I believe Sockets would be the better route, but that depends on the application, development schedule and familiarity of concepts.

心舞飞扬 2024-10-27 15:50:57

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

You can simply send messages with Windows Api (SendMessage).

聽兲甴掵 2024-10-27 15:50:57

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

An obvious omission in the options presented so far is COM. I'm expecting the usual flurry of "COM is crap" responses, but in my experience this hasn't been the case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文