单线程两个进程



我有两个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服务最适合实现这种行为?

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

  • A创建事件并启动进程B
  • A等待事件的信号
  • B还创建一个事件,执行它的第一项,然后向A的事件发出信号(该事件要么有一个众所周知的名称,要么在启动时或使用其他机制将句柄传递给B
  • B等待其事件
  • 当A从等待它的事件中恢复时,它完成它的工作,向B的事件发出信号并自己等待
  • 等等

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

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

对于进程间同步,可以使用信号量。这是文件。

最新更新