Консольное управление обработчиками
Каждый консольный процесс имеет свой собственный перечень функций управления обработчиками, которые вызываются системой, когда процесс получает сигнал CTRL+C, CTRL+BREAK или CTRL+CLOSE. Вначале, перечень управления обработчиками для каждого процесса содержит только заданную по умолчанию функцию обработчика, которая вызывает функцию ExitProcess . Консольный процесс может добавлять или удалять дополнительные функции HandlerRoutine путем вызова функции SetConsoleCtrlHandler. Эта функция не находится под влиянием перечней управления обработчиками для других процессов. Когда консольный процесс получает какой-либо из управляющих сигналов он вызывает функции обработчика. Основа для вызова - последняя из зарегистрированных и первая из вызываемых функций, до тех пор, пока один из обработчиков не возвратит значение ИСТИНА (TRUE). Если ни один из обработчиков не возвращает значение ИСТИНА (TRUE), вызывается заданный по умолчанию обработчик.
Нижеследующее объявление typedef иллюстрирует формат управляющей функции обработчика.
typedef BOOL (*PHANDLER_ROUTINE)(DWORD dwCtrlType); |
Параметр dwCtrlType функции идентифицирует, какой управляющий сигнал был принят, а величина возвращаемого значения указывает, был ли сигнал обработан.
Пример функции управления обработчиком, см. в статье Регистрация функции управления обработчиком.