다음을 통해 공유


IThreadProxy::SwitchOut 메서드

컨텍스트를 내부 가상 프로세서 루트에서 연결을 끊습니다.

virtual void SwitchOut(
   SwitchingProxyState switchState = Blocking
) =0;

매개 변수

  • switchState
    스위치를 실행 중인 스레드 프록시의 상태를 나타냅니다. 매개 변수는 SwitchingProxyState의 형식입니다.

설명

어떠한 이유로든, 실행 중인 가상 프로세서 루트에서 컨텍스트를 분리 하는 경우, SwitchOut 사용합니다. 값에 따라 switchState 매개변수를 전달하고, 가상 프로세서 루트에서 실행할지 여부에 따라, 호출 즉시 반환 하거나 컨텍스트와 관련된 스레드 프록시를 차단합니다. 이것은 Idle 로 설정하여 매개변수를 사용하는 SwitchOut 호출할때 발생하는 오류입니다. 이렇게하면 invalid_argument 예외가 발생합니다.

리소스 관리자가 지시하거나 일시적으로 초과 구독한 가상 프로세서 루트를 요청했기 때문에 그것을 수행한 이후 가상 프로세서 루트의 수를 줄일때, SwitchOut 는 매우 유용합니다. 이 경우 Blocking 를 매개변수 switchState 설정을 사용하여 SwitchOut 호출하기 전에, 가상 프로세스 루트에서 IVirtualProcessorRoot::Remove Method 메서드를 호출해야 합니다. 이것은 스레드 프록시를 막을 것이고, 스케줄러에 있는 다른 가상 프로세서를 실행에 사용할 수 있을 때 실행을 다시 시작할 수 있습니다. 차단 스레드 프록시는 함수 SwitchTo를 호출하여 이 스레드 프록시의 실행 컨텍스트로 전환하여 다시 시작할 수 있습니다. 또한 가상 프로세서 루트를 활성화하기 위해 관련 컨텍스트를 사용하여 스레드 프록시를 다시 시작할 수도 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 IVirtualProcessorRoot::Activate를 참조하십시오.

실행 중인 스레드 프록시를 차단하거나 가상 프로세서 루트를 일시적으로 분리하고, 스케쥴러 작업이 디스패치 되는 동안 이 기능을 활성화 될 수 있도록 가상 프로세서를 초기화 할때, SwitchOut 또한 사용할 수 있습니다. 만일 스레드 프록시를 차단하려는 경우, Blocking 을 매개변수 switchState 설정과 함께 SwitchOut 사용합니다. 위에서 언급했듯이 SwitchTo 또는 IVirtualProcessorRoot::Activate 을 사용하여 나중에 진행할 수 있습니다. 실행중인 가상 프로세서 루트에서 일시적으로 스레드 프록시를 분리하고, 스케쥴러와 가상 프로세서를 연결할때, Nesting 로 매개변수를 설정하여 SwitchOut 를 사용합니다. 가상 프로세서 루트에서 이것이 실행되는 동안 Nesting 으로 switchState 매개변수를 설정하여 SwitchOut 을 호출하는 것은 루트를 다시 초기화하고 다른 요구사항 없이 계속해서 실행중인 현재 스레드 프록시를 유지합니다. 스레드 프록시는 나중에 Blocking 를 사용하여 IThreadProxy::SwitchOut 메서드를 호출할 때까지 스케줄러에 남아 있는 것으로 간주됩니다. 스케쥴러에서 이것을 분리하는 SwitchTo 또는 IVirtualProcessorRoot::Activate 으로부터 재개될 수 있도록 설정된 Blocking 매개변수를 설정하여 SwitchOut 의 두번째 호출은 차단된 상태로 컨텍스트를 반환합니다. 이것은 가상 프로세서 루트에서 실행 중이지 않기 때문에, 다시 초기화가 발생하지 않습니다.

다시 초기화 된 가상 프로세서 루트는 리소스 관리자가 부여한 스케쥴러의 새로운 가상 프로세서 루트와 다르지 않습니다. 여러분은 IVirtualProcessorRoot::Activate 를 사용하는 실행 컨텍스트를 활성화 함으로써 실행을 위해 사용할 수 있습니다..

SwitchOut는 현재 실행 중인 스레드 또는 결과가 정의되었음을 나타내는 IThreadProxy 인터페이스에서 호출되어야 합니다.

Visual Studio 2010과 함께 제공 되는 헤더 및 라이브러리에서, 이 메서드는 매개 변수를 사용하지 않고 가상 프로세서 루트를 다시 초기화하지 않습니다. 이전 동작을 유지하기 위해, Blocking 의 기본 매개변수 값이 제공됩니다.

요구 사항

헤더: concrtrm.h

네임스페이스: 동시성

참고 항목

참조

IThreadProxy 구조체