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,则此参数是传递给触发入口点调用的 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) |