Функция HandlerRoutine


Функция HandlerRoutine является программно-определяемой функцией, которая используется с функцией SetConsoleCtrlHandler. Консольный процесс использует эту функцию для обработки управляющих сигналов, полученных процессом. Когда сигнал принимается, система создает в этом процессе поток для выполнения этой функции.

Тип PHANDLER_ROUTINE определяет указатель на эту функцию повторного вызова. HandlerRoutine - имя - заместитель для программно-определяемого имени функции.

Синтаксис

BOOL HandlerRoutine(

DWORD dwCtrlType // тип управляющего сигнала

);

Параметры

dwCtrlType

[in] Обозначает тип управляющего сигнала, полученного обработчиком. Это значение является одним из ниже перечисленных сигналов:

 

Сигнал

Описание

CTRL_C_EVENT

Был получен сигнал CTRL+C , или при вводе данных с клавиатуры, или созданный функцией GenerateConsoleCtrlEvent. 

CTRL_BREAK_EVENT

Был получен сигнал CTRL+ BREAK, или при вводе данных с клавиатуры, или созданный функцией GenerateConsoleCtrlEvent. 

CTRL_CLOSE_EVENT

Сигнал, который система отправляет во все процессы, связанные с консолью, когда пользователь закрывает консоль (или, избирая команду Close (Закрыть) в Системном меню консольного окна, или избирая команду End Task из Списка Задач). 

CTRL_LOGOFF_EVENT

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

CTRL_SHUTDOWN_EVENT

Сигнал, который система отправляет во все консольные процессы, когда система закрывается.

Обратите внимание! что этот сигнал принимается только обслуживающими модулями. Интерактивные прикладные программы завершают работу при выходе из системы, так что они не представляют интереса, когда система отправляет этот сигнал. Обслуживающие модули, к тому же, имеют свой собственный механизм предупреждения для событий отключения. Для получения дополнительной информации, см. статью Обработчик.

Возвращаемые значения

Если функция обрабатывает управляющий сигнал, она должна возвратить ИСТИНА (TRUE). Если она возвращает значение ЛОЖЬ (FALSE), используется следующая функция обработчика в списке обработчиков для этого процесса.

Замечания

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

Каждый консольный процесс имеет свой собственный список функций HandlerRoutine. Вначале, этот список содержит только заданную по умолчанию функцию обработчика, которая вызывает ExitProcess. Консольный процесс добавляет или удаляет дополнительные функции обработчика путем вызова функции SetConsoleCtrlHandler, которая не затрагивает список функций обработчиков для других процессов. Когда консольный процесс получает какой-либо из управляющих сигналов, его функции обработчиков вызывают последний из зарегистрированных, основываясь на первом из вызванных до тех пор, пока один из обработчиков не возвратит ИСТИНА (TRUE). Если ни один из обработчиков не возвращает значение ИСТИНА (TRUE), вызывается заданный по умолчанию обработчик.

Сигналы CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT дают процессу возможность очиститься перед завершением. Функция HandlerRoutine может выполнить любую необходимую очистку, затем сделать одно из ниже перечисленных действий:

Процесс может использовать функцию SetProcessShutdownParameters, чтобы воспрепятствовать системе показывать на экране диалоговое окно для пользователя, по которому он заканчивает работу в сети или выключает систему. В этом случае, система завершает работу процесса тогда, когда HandlerRoutine возвращает значение ИСТИНА (TRUE), или когда истекает период блокировки по времени.

Когда консольная программа запущена как модуль обслуживания, она получает модифицированный заданный по умолчанию консольный управляющий обработчик. Этот измененный обработчик не вызывает функцию ExitProcess при обработке сигнала CTRL_LOGOFF_EVENT. Он позволяет модулю обслуживания продолжать запускаться после того, как пользователь заканчивает работу в сети. Если модуль обслуживания устанавливает свой собственный консольный управляющий обработчик, этот обработчик вызывается перед заданным по умолчанию обработчиком. Если установленный обработчик вызывает функцию ExitProcess при обработке сигнала CTRL_LOGOFF_EVENT, модуль обслуживания прекращает работу, когда пользователь заканчивает работу в сети.

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

Смотри также

Обзор консольных приложений, Функции консоли, ExitProcess, GenerateConsoleCtrlEvent, GetProcessShutdownParameters, SetConsoleCtrlHandler, SetProcessShutdownParameters

Размещение и совместимость HandlerRoutine

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да

Windows Me

Да

Windows 98

Да

Windows 95

Да

Win32s

Нет

Используемая библиотека

Kernel32.lib

Заголовочный файл

 

- объявлено в

Wincon.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz