다음을 통해 공유


스레드 참조 관리

이 문서에는 Shell 경량 유틸리티 함수의 함수를 사용하여 스레드 참조를 관리하는 방법에 대한 정보가 포함되어 있습니다.

자식 스레드의 수명 동안 부모 스레드를 활성 상태로 유지해야 하는 상황이 발생합니다. instance 경우 부모 스레드에서 COM(Component Object Model) 개체를 만들고 자식 스레드로 마샬링하는 경우 해당 부모 스레드는 자식 스레드 전에 종료할 수 없습니다. 이를 위해 Shell은 이러한 함수를 제공합니다.

여기에 설명된 대로 부모 스레드에서 이러한 함수를 사용합니다.

  1. ThreadProc 함수 형식에 따라 애플리케이션 정의 스레드 프로시저를 선언합니다.

    DWORD WINAPI ThreadProc(LPVOID lpParameter);
    
  2. ThreadProc에서 SHCreateThreadRef를 호출하여 스레드에 대한 참조를 만듭니다. IUnknown의 instance 대한 포인터를 제공합니다. 이 IUnknownpcRef 에서 가리키는 값을 사용하여 참조 횟수를 유지 관리합니다. 이 수가 0보다 크면 스레드는 활성 상태로 유지됩니다.

  3. IUnknown에 대한 포인터를 사용하여 ThreadProc에서 SHSetThreadRef를 호출합니다. 그러면 SHGetThreadRef에 대한 후속 호출에서 검색할 항목이 있도록 참조가 설정됩니다.

  4. ThreadProc이 다른 스레드를 만드는 경우 해당 스레드의 ThreadProcSHCreateThreadRef에서 가져온 IUnknown에 대한 포인터를 사용하여 SHGetThreadRef를 호출할 수 있습니다. 그러면 SHCreateThreadRefpcRef 매개 변수가 가리키는 참조 수가 증가합니다.

  5. 스레드를 만듭니다. 이 작업은 일반적으로 SHCreateThread를 호출하고 pfnThreadProc 매개 변수에서 ThreadProc에 포인터를 전달하여 수행됩니다. 또한 dwFlags 매개 변수에 CTF_THREAD_REF 플래그를 전달합니다. ThreadProc이 실행되는 한 스레드가 활성 상태입니다.

  6. 자식 스레드를 만들 때 해당 SHCreateThread에 대한 호출에서 dwFlags 매개 변수의 CTF_REF_COUNTED 플래그를 전달합니다.

  7. 자식 스레드가 완료되고 해제되면 부모 스레드의 pcRef 에서 가리키는 값이 감소합니다. 모든 자식 스레드가 완료되면 원래 ThreadProc 에서 최종 스레드 참조를 완료하고 해제하여 참조 수를 0으로 삭제할 수 있습니다. 이 시점에서 SHCreateThread 에서 연 원래 스레드에 대한 참조가 해제되고 스레드가 완료됩니다.

또 다른 관련 함수는 SHReleaseThreadRef입니다. 이 함수는 스레드가 CTF_THREAD_REF 플래그와 함께 SHCreateThread를 사용하여 만들어진 경우 ThreadProc에 의해 호출됩니다. 그러나 ThreadProc 은 암시적으로 수행할 필요가 없습니다. SHCreateThreadRef를 통해 가져온 IUnknown에 대한 포인터에서 IUnknown::Release를 호출하는 것은 모두 수행해야 합니다.