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 를 호출하는 코드를 새 개체를 만드는 코드와 동기화하지 않으면 오류가 발생할 수 있습니다. 예를 들어 스레드가 Work1 및 Work2라는 두 개의 threadpool 작업 개체를 만든다고 가정합니다. 다른 스레드 는 CloseThreadpoolCleanupGroupMembers를 호출합니다. 스레드가 실행되는 시기에 따라 다음 중 어느 것이든 발생할 수 있습니다.

  • Work1 및 Work2는 기존 멤버가 릴리스된 후 정리 그룹에 추가됩니다. Work1 및 Work2를 제출하는 코드가 성공합니다.
  • 기존 멤버가 해제되기 전에 Work1이 정리 그룹에 추가되어 다른 멤버와 함께 Work1이 해제됩니다. 그런 다음 Work2가 추가됩니다. Work1을 제출하는 코드는 예외를 생성합니다. Work2를 제출하는 코드가 성공합니다.
  • Work1 및 Work2는 기존 멤버가 릴리스되기 전에 정리 그룹에 추가되어 Work1과 Work2가 모두 해제됩니다. Work1 또는 Work2를 제출하는 코드는 예외를 생성합니다.
보류 중인 작업 항목을 해제하지 않고 기다리거나 취소하려면 스레드 풀 콜백 함수인 WaitForThreadpoolIoCallbacks, WaitForThreadpoolTimerCallbacks, WaitForThreadpoolWaitCallbacks 또는 WaitForThreadpoolWorkCallbacks 중 하나를 사용합니다.

이 함수를 사용하는 애플리케이션을 컴파일하려면 _WIN32_WINNT 0x0600 이상으로 정의합니다.

예제

예제는 스레드 풀 함수 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 threadpoolapiset.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CloseThreadpoolCleanupGroup

CreateThreadpoolCleanupGroup

SetThreadpoolCallbackCleanupGroup

스레드 풀