Поделиться через


функция обратного вызова 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

Причина вызова точки входа планировщика. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
UmsSchedulerStartup
0
Создан поток планировщика UMS. Точка входа вызывается по этой причине один раз при каждом вызове EnterUmsSchedulingMode .
UmsSchedulerThreadBlocked
1
Рабочий поток UMS заблокирован.
UmsSchedulerThreadYield
2
Выполнение рабочего потока UMS, возвращающего элемент управления путем вызова функции UmsThreadYield .

[in] ActivationPayload

Если параметр Reason имеет значение UmsSchedulerStartup, этот параметр имеет значение NULL.

Если параметр Reason имеет значение UmsSchedulerThreadBlocked, бит 0 этого параметра указывает тип действия, которое обслуживалось при блокировке рабочего потока UMS.

Значение Значение
0
Поток, заблокированный в ловушке (например, ошибка жесткой страницы) или прерывание (например, вызов асинхронной процедуры).
1
Поток, заблокированный при системном вызове.
 

Если параметр 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)

См. также раздел

DequeueUmsCompletionListItems

EnterUmsSchedulingMode

UmsThreadYield