0

我有两个 C++ 进程(A 和 B),在 Windows 下执行,一个启动另一个。我想有效地单线程执行它们。例如:

  1. 启动过程 A
  2. A创造B
  3. A 暂停
  4. B 执行一些固定的操作
  5. B暂停,A恢复
  6. A 执行一些固定的操作
  7. A暂停,B恢复
  8. (重复 4 - 7)

哪种 Windows 同步和 IPC 服务最适合实现此类行为?

4

3 回答 3

6

在这种情况下,事件将起作用:

  • A 创建一个事件并启动流程 B
  • A 等待事件发出信号
  • B 还创建一个事件,它是第一项,然后发出 A 的事件信号(该事件具有众所周知的名称,或者可以在 B 启动时将句柄传递给它,或者使用其他机制
  • B 等待它的事件
  • 当A从等待它的事件中恢复时,它会做它的工作,通知B的事件并自行等待
  • 很快...

只要确保您有错误处理,因此如果另一个进程挂起或意外终止,每个进程都可以恢复并执行任何必要的操作。超时可以处理挂起情况,等待其他进程的句柄(使用 WaitForMultipleObjects() 以及进程和事件句柄)可以确定其他进程是否/何时终止。

于 2008-10-30T07:09:32.953 回答
2

将两个事件句柄 (CreateEvent) 传递给进程 B。当进程 a 完成工作时向一个句柄发出信号,在进程 b 完成工作时发出另一个句柄信号。每个进程调用 WaitForSingleObject() 来等待另一个进程完成一组工作。

于 2008-10-30T07:03:18.143 回答
0

对于进程间同步,您可以使用semaphores。这是文档

于 2008-10-30T06:52:19.350 回答