DequeueUmsCompletionListItems 函数 (winbase.h)

从指定的 UMS 完成列表中检索用户模式计划 (UMS) 工作线程。

警告

自Windows 11起,不支持用户模式计划。 所有调用都失败,出现错误 ERROR_NOT_SUPPORTED

语法

BOOL DequeueUmsCompletionListItems(
  [in]  PUMS_COMPLETION_LIST UmsCompletionList,
  [in]  DWORD                WaitTimeOut,
  [out] PUMS_CONTEXT         *UmsThreadList
);

参数

[in] UmsCompletionList

指向从中检索工作线程的完成列表的指针。

[in] WaitTimeOut

检索操作的超时间隔(以毫秒为单位)。 如果间隔已过,函数将返回 ,即使没有工作线程排到完成列表。

如果 WaitTimeOut 参数为零,则会检查完成列表是否有可用的工作线程,而不会等待工作线程变为可用。 如果 WaitTimeOut 参数为 INFINITE,则函数的超时间隔永远不会超过。 但是,不建议这样做,因为它会导致函数阻塞,直到一个或多个工作线程可用。

[out] UmsThreadList

指向UMS_CONTEXT变量的指针。 在输出时,此参数接收指向 UMS 线程上下文列表中第一个 UMS 线程上下文的指针。

如果在 WaitTimeOut 参数指定的超时之前没有可用的工作线程,此参数将设置为 NULL。

返回值

如果函数成功,则返回非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 可能的错误值包括以下内容。

返回代码 说明
ERROR_TIMEOUT
在指定的超时间隔过去之前,没有可用的线程。
ERROR_NOT_SUPPORTED
不支持 UMS。

注解

创建工作线程或取消阻止以前阻止的工作线程时,系统会将 UMS 工作线程排入完成列表。 DequeueUmsCompletionListItems 函数检索指向指定完成列表中所有线程上下文列表的指针。 GetNextUmsListItem 函数可用于将 UMS 线程上下文从列表中弹出到计划程序自己的就绪线程队列中。 计划程序负责根据应用程序选择的优先级选择要运行的线程。

请勿直接从 DequeueUmsCompletionListItems 提供的列表中运行 UMS 线程,或在列表完全为空之前运行从列表传输到就绪线程队列的线程。 这可能会导致应用程序中出现不可预知的行为。

如果多个调用方尝试从共享完成列表中检索线程,则只有第一个调用方检索这些线程。 对于后续调用方, DequeueUmsCompletionListItems 函数返回成功,但 UmsThreadList 参数设置为 NULL。

要求

要求
最低受支持的客户端 仅 Windows 7 (64 位) [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll
API 集 windows 7) 中引入的 api-ms-win-core-ums-l1-1-0 (

另请参阅

GetNextUmsListItem