Функция
HandlerRoutineФункция
HandlerRoutine является программно-определяемой функцией, которая используется с функцией SetConsoleCtrlHandler. Консольный процесс использует эту функцию для обработки управляющих сигналов, полученных процессом. Когда сигнал принимается, система создает в этом процессе поток для выполнения этой функции.Тип PHANDLER_ROUTINE определяет указатель на эту функцию повторного вызова. HandlerRoutine - имя - заместитель для программно-определяемого имени функции.
Синтаксис
HandlerRoutine(
); |
Параметры
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 |
Нет |
Замечания по платформе |
Не имеется |