slinkinone
@slinkinone
Агент "Везде успеть"

Какие существуют методы PIC в Windows?

Всем доброго времени суток!
Столкнулся с проблемой, опишу step-by-step:
  1. Создаю консольное (PARENT) приложение. В имплементации, оно создаёт несколько дочерних процессов.
  2. Дочерние процессы (CHILDs) пишут логи (как пример), как следствие, после завершения этих процессов, необходимо чтобы они почистили за собой эти файлы. Естественно, для удаления файлов есть специальные функции.
  3. После того, как MAIN процесс завершил работу, ему необходимо сообщить дочкам что нужно убрать за собой, после чего, их можно терминировать.


Собственно проблема в том, что у меня не получает реализовать корректное завершение главного процесса со всеми дочками. Как я понял, SetConsoleCtrlHandler и GenerateConsoleCtrlEvent могут помочь в этом, посредством генеации CTRL_BREAK_EVENT из MAIN для дочек.

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

P.S.: На всякий случай прикладываю свой код (не очень чистый, т.к. использовал для дебага).
Краткое описание, в нём я содаю такое дерево процессов:
ROOT
----|___Parent
--------|____Child
В Child процессе задаю handler для обработки сигнала/сообщения от родителя.

После запуска, жмём Any key для создания Parent.
Затем в Parent окне жмём Any key для создания Child процесса.
Затем жмём в Parent окне ещё раз Any key для генерации сигнала для Child-а.
Видим что handler в Child процессе не отработал.

Ссылка на код (pastbin):
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
У вас дочерние процессы висят на system("pause"); и не завершаются самостоятельно.
Просто удалите эту команду в дочках, оставьте только в главном процессе и не надо будет ничего мутить с CTRL_BREAK.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы