Как отловить событие закрытия консоли? - PullRequest
0 голосов
/ 03 августа 2011

Контекст моей проблемы:

  1. У меня приложение Windows .NET (GUI) работает как основной процесс.
  2. Из этого (родительского) процесса я создаюпара подпроцессов как консольные процессы.
  3. Основной процесс отправляет данные дочерним процессам через именованные каналы.
  4. В основном приложении у меня есть список подпроцессов.

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

Моя консольная (дочерний процесс) программа - это просто "main ()" сФункция цикла, которая читает канал (и отображает данные).У него нет системы сообщений или чего-либо еще, что могло бы обработать оконный «выход».

Первая идея, которая приходит мне в голову, - это опрос подпроцессов из основного приложения для обновления списка.Но это означает, что я должен ввести таймер или поток, который наблюдает за консолями.Мне не нравится идея.

У кого-нибудь есть идея получше?

1 Ответ

0 голосов
/ 01 сентября 2011

WaitForSingleObject(hThread, 0) сообщит вам, передан ли поток, указанный в аргументе hThread, и, следовательно, завершен. То же самое относится к hProcess.

Обе ручки вашего дочернего процесса возвращаются после вызова CreateProcess(). Вы можете либо сразу их закрыть, либо контролировать, используя WaitForSingleObject.

...