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,则此参数是传递给触发入口点调用的 EnterUmsSchedulingMode 函数的UMS_SCHEDULER_STARTUP_INFO结构的 SchedulerParam 成员。

如果 Reason 参数为 UmsSchedulerThreadYield ,则此参数是传递给触发入口点调用的 UmsThreadYield 函数的 SchedulerParam 参数。

如果 Reason 参数为 UmsSchedulerThreadBlocked,则此参数为 NULL。

返回值

备注

UmsSchedulerProc 函数指针类型在 WinBase.h 中定义为PUMS_SCHEDULER_ENTRY_POINT。 基础函数类型在 WinNT.h 中定义为RTL_UMS_SCHEDULER_ENTRY_POINT

每个 UMS 计划程序线程都有一个关联的 UmsSchedulerProc 入口点函数,该函数在线程调用 EnterUmsSchedulingMode 函数时指定。 当计划程序线程转换为 UMS 时,系统会调用计划程序入口点函数,原因为 UmsSchedulerStartup

随后,当在计划程序线程上运行的 UMS 工作线程生成或阻止时,系统会使用指向工作线程的 UMS 线程上下文的指针调用计划程序线程的入口点函数。

应用程序的计划程序负责选择要运行的下一个 UMS 工作线程。 计划程序实现影响其 UMS 线程执行的所有策略,包括处理器相关性和线程优先级。 例如,计划程序可能会优先考虑 I/O 密集型线程,或者它可能先到先得地运行线程。 此逻辑可以在计划程序入口点函数中实现,也可以在应用程序中的其他位置实现。

当阻止的 UMS 工作线程取消阻止时,系统会将未阻止的线程排队到关联的完成列表,并发出完成列表事件的信号。 若要从完成列表中检索 UMS 工作线程,请使用 DequeueUmsCompletionListItems 函数。

要求

要求
最低受支持的客户端 仅 Windows 7 (64 位) [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 winnt.h (包括 WinBase.h、Windows.h)

另请参阅

DequeueUmsCompletionListItems

EnterUmsSchedulingMode

UmsThreadYield