【问题标题】:c++ Interprocesses communicationc++ 进程间通信
【发布时间】:2021-09-14 13:26:19
【问题描述】:
  • 我需要编写两个将在 Windows 操作系统上运行的 C++ 程序 P1 和 P2。
  • P1 将首先启动。
  • P1 将启动 P2(使用来自 processthreadsapi.hCreateProcess())。
  • 每 30 分钟 P2 将向 P1 发出信号(发送消息)。
  • P1 包含一个函数 F,它将在 P1 接收到来自 P2 的信号(消息)时启动。

由于 P1 将启动 P2,我想 P2 会知道 P1 并能够轻松地发出信号(发送消息)...

你能告诉我实现这个机制最简单的方法是什么吗?

对我来说,在这篇文章中,重要的一点是从 P2 向 P1 发送消息的最简单机制是什么。

使用CreateProcess() 函数,信息。可以发送到子进程。 这个信息可以是父进程(PPID)的“身份”,以便子进程可以向它发送消息吗?

谢谢。

【问题讨论】:

  • 可以是线程,而不是进程吗?
  • 嗨。我认为是一个过程而不是一个线程。

标签: c++ process communication


【解决方案1】:

对于您描述的问题,我将使用匿名管道进行进程间通信。

这是一篇关于 Windows IPC 的完整文章,您应该阅读: https://docs.microsoft.com/en-us/windows/win32/ipc/interprocess-communications#using-pipes-for-ipc

【讨论】:

  • 谢谢。我认为这是一个很好的建议。我刚刚使用这段代码做了一些有希望的测试:ownedcore.com/forums/world-of-warcraft/…
  • 实际上,我认为(但我不确定)管道正在阻塞对象(在我发布的示例中,它们正在阻塞)。我的意思是 P1 和 P2 除了通过它们的管道相互通信之外,不能做“一些事情”。我需要的是 P1 能够做其他“事情”,他的“事情”。当 P2 能够检测到的“某事”发生时,P2 会向 P1 发送消息。 P1 收到此消息。而这个消息接收会引发函数 F() 的执行。
  • @Lea 只需创建新线程并在其上做任何你想做的事情
  • 谢谢。我愿意 P1 和 P2 彼此“独立”(当然除了进程间通信)。如果 P2 是 P1 的线程,我不太确定它们是否真的相互“独立”(在内存共享、操作系统管理等方面)。这可能需要在两者之间进行比较。另外,我想这取决于 P2 的功能。对我来说,P2 是实现一个 TCP 套接字。
  • @Lea 可以在每个进程中创建新线程。 P1:在一个线程中处理 IPC 消息,在另一个线程中执行您需要的任何事情。 P2 也一样。
【解决方案2】:

你能告诉我实现这个机制最简单的方法是什么吗?

  1. 编写一个监听连接(服务器)的程序。
  2. 编写一个连接到服务器(客户端)的程序。
  3. 从客户端启动服务器并发送消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多