Однопоточность двух процессов - PullRequest
0 голосов
/ 30 октября 2008

У меня есть два процесса C ++ (A и B), выполняющиеся под Windows, где один запускает другой. Я хотел бы эффективно однопоточность их выполнения. Например:

  1. Начать процесс A
  2. A создает B
  3. А приостанавливает
  4. B выполняет некоторый фиксированный набор операций
  5. B приостанавливается и A возобновляется
  6. A выполняет некоторый фиксированный набор операций
  7. A приостанавливается и B возобновляется
  8. (повтор 4 - 7)

Какие службы синхронизации Windows и IPC лучше всего подходят для реализации этого типа поведения?

Ответы [ 3 ]

6 голосов
/ 30 октября 2008

События будут работать в этом случае:

  • A создает событие и запускает процесс B
  • A ожидает события, о котором будет сообщено
  • B также создает событие, выполняет его первый элемент, затем сигнализирует о событии A (которое либо имеет хорошо известное имя, либо дескриптор может быть передан B, когда он запускается, либо с использованием какого-либо другого механизма
  • B ждет своего события
  • когда A возобновляет ожидание своего события, он выполняет свою работу, сигнализирует о событии B и ожидает самостоятельно
  • и так далее ...

Просто убедитесь, что у вас есть обработка ошибок, чтобы каждый процесс мог возобновить работу и делать все необходимое, если другой зависает или неожиданно завершает работу. Тайм-ауты могут обработать ситуацию зависания, и ожидание на дескрипторе другого процесса (используя WaitForMultipleObjects () вместе с дескриптором процесса и события) может определить, завершится ли другой процесс.

2 голосов
/ 30 октября 2008

Передача двух дескрипторов событий (CreateEvent) в процесс B. сигнализирует один дескриптор, когда процесс a завершен, а другой - когда процесс b завершает работу. Каждый процесс вызывает WaitForSingleObject (), чтобы дождаться, пока другой процесс завершит набор работ.

0 голосов
/ 30 октября 2008

Для межпроцессной синхронизации вы можете использовать семафоры . Вот документация .

...