다음을 통해 공유


IThreadProxy::SwitchTo 메서드

현재 실행 중인 컨텍스트에서 다른 컨텍스트로 협력 컨텍스트 전환을 수행합니다.

virtual void SwitchTo(
   IExecutionContext * pContext,
   SwitchingProxyState switchState
) =0;

매개 변수

  • pContext
    공동으로 전환할 실행 컨텍스트입니다.

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

설명

첫 번째 실행 컨텍스트의 IExecutionContext::Dispatch 메서드에서 한 실행 컨텍스트에서 다른 컨텍스트로 전환하려면 이 메서드를 사용합니다. 아직 연결되어 있지 않으면 메서드는 스레드 프록시를 사용하여 실행 컨텍스트 pContext와 연결합니다. 현재 스레드 프록시의 소유권은 switchState 인수에 대해 지정하는 값으로 결정됩니다.

현재 실행 중인 스레드 프록시를 리소스 관리자에 반환할 때 값 Idle을 사용합니다. 매개 변수 switchState를 Idle로 설정한 상태에서 SwitchTo를 호출하면 실행 컨텍스트 pContext가 내부 실행 리소스에서 실행을 시작합니다. 이 스레드 프록시의 소유권은 리소스 관리자로 전송되고 전송을 완료하기 위해 SwitchTo을 반환한 후에 실행 컨텍스트의 Dispatch 메서드에서 실행됩니다. 스레드 프록시가 디스패치하는 실행 컨텍스트는 스레드 프록시에서 연결 해제되며 스케줄러는 언제든지 다시 사용하거나 필요할 때 소멸시킬 수 있습니다.

이 스레드 프록시가 차단된 상태로 들어가도록 하려면 Blocking 값을 사용합니다. 매개 변수 switchState를 Blocking로 설정한 상태에서 SwitchTo를 호출하면 실행 컨텍스트 pContext가 실행을 시작하고 다시 시작할 때까지 현재 스레드 프록시를 차단합니다. 스케줄러는 스레드 프록시가 Blocking 상태에 있을 때 스레드 프록시 소유권을 유지합니다. 차단 스레드 프록시는 함수 SwitchTo를 호출하여 이 스레드 프록시의 실행 컨텍스트로 전환하여 다시 시작할 수 있습니다. 또한 가상 프로세서 루트를 활성화하기 위해 관련 컨텍스트를 사용하여 스레드 프록시를 다시 시작할 수도 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 IVirtualProcessorRoot::Activate를 참조하십시오.

실행 중인 가상 프로세서 루트에서 이 스레드 프록시 및 작업을 디스패치하는 스케줄러를 일시적으로 분리하려고 할 때 값 Nesting을 사용합니다. 매개 변수 switchState를 Nesting으로 설정한 상태에서 SwitchTo를 호출하면 실행 컨텍스트 pContext가 실행을 시작하고 현재 스레드 프록시는 가상 프로세서 루트가 없이도 실행을 계속합니다. 스레드 프록시는 나중에 IThreadProxy::SwitchOut 메서드를 호출할 때까지 스케줄러에 남아 있는 것으로 간주됩니다. IThreadProxy::SwitchOut 메서드는 가상 프로세서 루트의 일정이 재조정될 때까지 스레드 프록시를 차단할 수 있습니다.

SwitchTo는 현재 실행 중인 스레드 또는 결과가 정의되었음을 나타내는 IThreadProxy 인터페이스에서 호출되어야 합니다. 함수는 매개 변수 pContext가 NULL로 설정된 경우 invalid_argument를 throw합니다.

요구 사항

헤더: concrtrm.h

네임스페이스: 동시성

참고 항목

참조

IThreadProxy 구조체

SwitchingProxyState 열거형