我有两个C++进程(A和B),在Windows下执行,其中一个启动另一个。我想有效地单线程执行它们。例如:
- 启动进程A
- A创造B
- A暂停
- B执行一些固定的操作集
- B暂停,A恢复
- A执行一些固定的操作集
- A暂停,B恢复
- (重复4-7)
哪种Windows同步和IPC服务最适合实现这种行为?
事件在这种情况下会起作用:
- A创建事件并启动进程B
- A等待事件的信号
- B还创建一个事件,执行它的第一项,然后向A的事件发出信号(该事件要么有一个众所周知的名称,要么在启动时或使用其他机制将句柄传递给B
- B等待其事件
- 当A从等待它的事件中恢复时,它完成它的工作,向B的事件发出信号并自己等待
- 等等
只要确保您有错误处理,以便在另一个进程挂起或意外终止时,每个进程都可以恢复并执行任何必要的操作。超时可以处理挂起情况,等待其他进程的句柄(使用WaitForMultipleObjects()以及进程和事件句柄)可以确定其他进程是否/何时终止。
将两个事件句柄(CreateEvent)传递给进程B。当进程a完成工作时,用信号通知一个句柄,当进程B完成工作时用信号通知另一个句柄。每个进程都调用WaitForSingleObject()来等待另一个进程完成一组工作。
对于进程间同步,可以使用信号量。这是文件。