Как я могу ждать, чтобы дочерний процесс был действительно запущен

0

Как я могу дождаться, когда дочерний процесс, запущенный через функцию CreateProcess, будет запущен? Я думаю о функции WaitForInputIdle, но он возвращается раньше, чем дочернее приложение рисует все окна.

  • 0
    У вас есть исходный код дочернего процесса? Если вы это сделаете, возможно, используйте именованное событие для сигнализации между процессами.
  • 0
    Или используйте переменную условия
Показать ещё 4 комментария
Теги:
winapi

2 ответа

1

По пути решить эту проблему, вы создаете канал в родительском. После вилки родительский текст читает из канала, и ребенок записывает некоторые данные, чтобы сообщить, что он готов к продолжению.

  • 4
    Достаточно объекта Event!
  • 0
    Конечно, любое решение предполагает, что у вас есть исходный код для дочернего процесса, и вы можете добавить к нему такое уведомление.
Показать ещё 1 комментарий
0

Если у вас есть код для дочернего процесса, один из способов - создать именованное событие в родительском процессе и подождать этого события. В дочернем процессе вы открываете событие и сигнализируете об этом, когда дочерний процесс решает, что он действительно запущен.

Если вы собираетесь создавать множество процессов, вам понадобится соглашение об именах для событий, чтобы каждая родительская/дочерняя пара имела собственное событие. Одно из решений этого - назвать событие с GUID, а затем передать этот GUID в дочерний процесс в командной строке.

  • 0
    Нет, у меня нет исходного кода дочернего процесса
  • 0
    Просто к сведению (я знаю, что у вас нет доступа к источнику, но ...) вы не хотите использовать именованное событие (есть проблемы с безопасностью, уникальное именование и т. Д.). Создайте неназванное событие, передавая SECURITY_ATTRIBUTES в CreateEvent (), и укажите bInheritHandle = TRUE. Затем при создании дочернего процесса вы передаете ему дескриптор с помощью аргументов cmdline (подумайте: sprintf (buf, "% p", handle);), а дочерний процесс может захватить его и дать вам сигнал. Смотрите также DuplicateHandle ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню