функция обратного вызова RTL_UMS_SCHEDULER_ENTRY_POINT (winnt.h)
Определяемая приложением функция точки входа планировщика в пользовательском режиме (UMS), связанная со списком завершения UMS.
Тип PUMS_SCHEDULER_ENTRY_POINT определяет указатель на эту функцию. UmsSchedulerProc — это заполнитель для имени функции, определяемой приложением.
Синтаксис
RTL_UMS_SCHEDULER_ENTRY_POINT RtlUmsSchedulerEntryPoint;
void RtlUmsSchedulerEntryPoint(
[in] RTL_UMS_SCHEDULER_REASON Reason,
[in] ULONG_PTR ActivationPayload,
[in] PVOID SchedulerParam
)
{...}
Параметры
[in] Reason
Причина вызова точки входа планировщика. Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Создан поток планировщика UMS. Точка входа вызывается по этой причине один раз при каждом вызове EnterUmsSchedulingMode . |
|
Рабочий поток UMS заблокирован. |
|
Выполнение рабочего потока UMS, возвращающего элемент управления путем вызова функции UmsThreadYield . |
[in] ActivationPayload
Если параметр Reason имеет значение UmsSchedulerStartup, этот параметр имеет значение NULL.
Если параметр Reason имеет значение UmsSchedulerThreadBlocked, бит 0 этого параметра указывает тип действия, которое обслуживалось при блокировке рабочего потока UMS.
Значение | Значение |
---|---|
|
Поток, заблокированный в ловушке (например, ошибка жесткой страницы) или прерывание (например, вызов асинхронной процедуры). |
|
Поток, заблокированный при системном вызове. |
Если параметр Reason имеет значение UmsSchedulerThreadYield, этот параметр является указателем на контекст потока UMS рабочего потока UMS, который был получен.
[in] SchedulerParam
Если параметр Reason имеет значение UmsSchedulerStartup, этот параметр является элементом SchedulerParamструктуры UMS_SCHEDULER_STARTUP_INFO , переданной функции EnterUmsSchedulingMode , которая запустила вызов точки входа.
Если параметр Reason имеет значение UmsSchedulerThreadYield , этот параметр является параметром SchedulerParam, переданным функции UmsThreadYield , которая активирует вызов точки входа.
Если параметр Reason имеет значение UmsSchedulerThreadBlocked, этот параметр имеет значение NULL.
Возвращаемое значение
None
Remarks
Тип указателя функции UmsSchedulerProc определен как PUMS_SCHEDULER_ENTRY_POINT в WinBase.h. Базовый тип функции определен как RTL_UMS_SCHEDULER_ENTRY_POINT в WinNT.h
Каждый поток планировщика UMS имеет связанную функцию точки входа UmsSchedulerProc , которая указывается при вызове потоком функции EnterUmsSchedulingMode . Система вызывает функцию точки входа планировщика с причиной UmsSchedulerStartup при преобразовании потока планировщика для UMS.
Впоследствии, когда рабочий поток UMS, запущенный в потоке планировщика, выдает или блокируется, система вызывает функцию точки входа потока планировщика с указателем на контекст потока UMS рабочего потока.
Планировщик приложения отвечает за выбор следующего рабочего потока UMS для запуска. Планировщик реализует все политики, влияющие на выполнение потоков UMS, включая сходство процессора и приоритет потоков. Например, планировщик может уделять приоритет потокам с интенсивным вводом-выводом или запускать потоки в порядке поступления. Эту логику можно реализовать в функции точки входа планировщика или в другом месте приложения.
Когда заблокированный рабочий поток UMS разблокируется, система помещает разблокированный поток в очередь в связанный список завершения и сообщает о событии списка завершения. Чтобы получить рабочие потоки UMS из списка завершения, используйте функцию DequeueUmsCompletionListItems .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 (только 64-разрядная версия) [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | winnt.h (включая WinBase.h, Windows.h) |