Книга: Системное программирование в среде Windows
Генерация управляющих событий консоли
Генерация управляющих событий консоли
Прерывание выполнения процесса извне может порождать проблемы, поскольку это лишает процесс возможности произвести необходимую завершающую обработку данных и очистку ресурсов. Воспользоваться SEH в данном случае нельзя ввиду того, что не существует общего метода, который позволял бы одному процессу возбуждать исключения в другом[25]. В то же время, с учетом некоторых ограничений, механизм управляющих событий консоли делает возможной передачу одним процессом другому управляющих сигналов, или событий, консоли. В программе 4.5 было продемонстрировано, как установить обработчик для перехвата сигналов и организовать генерацию исключений этим обработчиком. В указанном примере сигнал генерировался по приказу пользователя средствами пользовательского интерфейса.
Таким образом, вполне можно добиться того, чтобы один процесс генерировал сигнал, соответствующий определенному событию, в другом указанном процессе или группе процессов. Вспомните флаг CREATE_NEW_PROCESS_GROUP функции CreateProcess. Если этот флаг установлен, то идентификатор нового процесса идентифицирует группу процессов и является корневым (root) процессом данной группы. Все новые процессы, создаваемые данным родительским процессом, будут автоматически попадать в эту группу до тех пор, пока при вызове функции CreateProcess не будет использован флаг CREATE_NEW_PROCESS_GROUP. Сгруппированные процессы аналогичны группам процессов в UNIX.
Процесс может генерировать события CTRL_C_EVENT или CTRL_BREAK_EVENT в указанной группе процессов, идентифицируя ее с помощью идентификатора корневого процесса. Консоль целевых процессов должна совпадать с консолью процесса, генерирующего событие. В частности, вызывающий процесс не может быть создан с использованием собственной консоли (посредством флагов CREATE_NEW_CONSOLE или DETACHED_PROCESS).
BOOL GenerateConsoleCtrlEvent(DWORD dwCtrlEvent, DWORD dwProcessGroup)
Тогда значением первого параметра должно быть либо CTRL_C_EVENT, либо CTRL_BREAK_EVENT. Второй параметр идентифицирует группу процессов.
- Процессы и потоки Windows
- Создание процесса
- Счетчики дескрипторов процессов
- Идентификаторы процессов
- Дублирование дескрипторов
- Завершение и прекращение выполнения процесса
- Ожидание завершения процесса
- Блоки и строки окружения
- Пример: параллельный поиск указанного текстового шаблона
- Процессы в многопроцессорной среде
- Временные характеристики процесса
- Пример: временные характеристики процессов
- Генерация управляющих событий консоли
- Пример: простое управление задачами
- Объекты задач
- Резюме
- Упражнения
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Расширение механизма событий
- Существует ли возможность скопировать текст из консоли?
- Пример: обработчик управляющих сигналов консоли
- 17.3.6. Распространение событий
- Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий
- Анатомия управляющих структур
- Применение событий
- Рекомендации по обработке событий в среде .NET Framework
- 2.4.3. Генерация кода в Power Builder
- Хранение параметров настройки консоли
- Visual Studio .NET автоматически создаст и свяжет с кнопкой пустой обработчик событий