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 函式會釋出屬於清除群組成員的所有工作物件、等候物件和定時器物件,以簡化線程集區回呼物件的清除。 當物件是以建立清除群組時指定的 threadpool 回呼環境建立物件時,對象會成為清除群組的成員。 如需詳細資訊,請參閱 CreateThreadpoolCleanupGroup。
CloseThreadpoolCleanupGroupMembers 函式會封鎖,直到所有目前執行回呼函式完成為止。 如果 fCancelPendingCallbacks 為 TRUE,則會取消未處理的回呼;否則,函式會封鎖直到所有未完成的回呼完成為止。 在 CloseThreadpoolCleanupGroupMembers 函式傳回之後,應用程式不應該使用在呼叫 CloseThreadpoolCleanupGroupMembers 時,屬於清除群組成員的任何物件。 此外,應用程式不應該藉由呼叫 CloseThreadpoolWork 之類的函式來個別釋放任何對象,因為對象已釋放。
CloseThreadpoolCleanupGroupMembers 函式不會關閉清除群組本身。 相反地,清除群組會持續存在,直到呼叫 CloseThreadpoolCleanupGroup 函式為止。 此外,關閉清除群組不會影響相關聯的線程集區回呼環境。 回呼環境會持續存在,直到呼叫 DestroyThreadpoolEnvironment 來終結為止。
只要清除群組持續存在,使用清除群組相關聯的線程集區回呼環境所建立的新物件就會新增至清除群組。 這可讓應用程式重複使用清除群組。 不過,如果應用程式未將呼叫 CloseThreadpoolCleanupGroupMembers 的程式代碼與建立新物件的程式代碼同步處理,可能會導致錯誤。 例如,假設線程會建立兩個 threadpool 工作物件 Work1 和 Work2。 另一個線程會呼叫 CloseThreadpoolCleanupGroupMembers。 視線程執行的時間而定,可能會發生下列任何一項:
- Work1 和 Work2 會在其現有成員發行之後新增至清除群組。 提交 Work1 和 Work2 的程式碼將會成功。
- Work1 會在現有成員發行之前新增至清除群組,導致 Work1 連同其他成員一起釋出。 然後新增 Work2。 提交 Work1 的程式代碼會產生例外狀況;提交 Work2 的程式代碼將會成功。
- Work1 和 Work2 會在其現有成員發行之前新增至清除群組,導致 Work1 和 Work2 都發行。 提交 Work1 或 Work2 的程式代碼會產生例外狀況。
若要編譯使用此函式的應用程式,請將_WIN32_WINNT定義為0x0600或更高版本。
範例
如需範例,請參閱 使用線程集區函式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | threadpoolapiset.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |