closeThreadpoolCleanupGroupMembers 函数 (threadpoolapiset.h)

释放指定清理组的成员,等待所有回调函数完成,并选择性地取消任何未完成的回调函数。

语法

void CloseThreadpoolCleanupGroupMembers(
  [in, out]           PTP_CLEANUP_GROUP ptpcg,
  [in]                BOOL              fCancelPendingCallbacks,
  [in, out, optional] PVOID             pvCleanupContext
);

参数

[in, out] ptpcg

指向定义清理组 的TP_CLEANUP_GROUP 结构的指针。 CreateThreadpoolCleanupGroup 函数返回此指针。

[in] fCancelPendingCallbacks

如果此参数为 TRUE,则函数将取消尚未启动的未完成回调。 如果此参数为 FALSE,则函数将等待未完成的回调函数完成。

[in, out, optional] pvCleanupContext

要传递给应用程序的清理组回调函数的应用程序定义数据。 可以在调用 SetThreadpoolCallbackCleanupGroup 时指定回调函数。

返回值

备注

CloseThreadpoolCleanupGroupMembers 函数通过在单个操作中释放属于清理组成员的所有工作对象、等待对象和计时器对象,简化了线程池回调对象的清理。 使用创建清理组时指定的线程池回调环境创建对象时,对象将成为清理组的成员。 有关详细信息,请参阅 CreateThreadpoolCleanupGroup

CloseThreadpoolCleanupGroupMembers 函数将阻止,直到当前执行的所有回调函数完成。 如果 fCancelPendingCallbacks 为 TRUE,则取消未完成的回调;否则,函数会阻塞,直到所有未完成的回调也完成。 在 CloseThreadpoolCleanupGroupMembers 函数返回后,应用程序不应使用在调用 CloseThreadpoolCleanupGroupMembers 时属于清理组的任何对象。 此外,应用程序不应通过调用函数(如 CloseThreadpoolWork)单独释放任何对象,因为这些对象已经释放。

CloseThreadpoolCleanupGroupMembers 函数不会关闭清理组本身。 相反,清理组会一直保留,直到调用 CloseThreadpoolCleanupGroup 函数。 此外,关闭清理组不会影响关联的线程池回调环境。 回调环境一直保留,直到通过调用 DestroyThreadpoolEnvironment 将其销毁。

只要清理组保留,使用清理组的关联线程池回调环境创建的新对象就添加到清理组。 这允许应用程序重复使用清理组。 但是,如果应用程序不将调用 CloseThreadpoolCleanupGroupMembers 的代码与创建新对象的代码同步,则可能会导致错误。 例如,假设一个线程创建两个线程池工作对象:Work1 和 Work2。 另一个线程调用 CloseThreadpoolCleanupGroupMembers。 根据线程运行的时间,可能发生以下任一情况:

  • 释放现有成员后,Work1 和 Work2 将添加到清理组。 提交 Work1 和 Work2 的代码将成功。
  • Work1 在释放其现有成员之前添加到清理组,导致 Work1 与其他成员一起被释放。 然后添加 Work2。 提交 Work1 的代码将生成异常;提交 Work2 的代码将成功。
  • Work1 和 Work2 在释放其现有成员之前会添加到清理组,从而导致释放 Work1 和 Work2。 提交 Work1 或 Work2 的代码将生成异常。
若要仅等待或取消挂起的工作项而不释放它们,请使用线程池回调函数之一: WaitForThreadpoolIoCallbacksWaitForThreadpoolTimerCallbacksWaitForThreadpoolWaitCallbacksWaitForThreadpoolWorkCallbacks

若要编译使用此函数的应用程序,请将_WIN32_WINNT定义为 0x0600 或更高版本。

示例

有关示例,请参阅 使用线程池函数

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 threadpoolapiset.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CloseThreadpoolCleanupGroup

CreateThreadpoolCleanupGroup

SetThreadpoolCallbackCleanupGroup

线程池