IVirtualProcessorRoot::Deactivate 메서드

이 가상 프로세서 루트에서 현재 실행 중인 스레드 프록시가 실행 컨텍스트 디스패치를 중지하게 됩니다.스레드 프록시는 Activate 메서드에 대한 호출 실행을 다시 시작합니다.

virtual bool Deactivate(
   _Inout_ IExecutionContext * pContext
) =0;

매개 변수

  • pContext
    현재 이 루트에 의해 디스패치되는 컨텍스트입니다.

반환 값

부울 값입니다.true의 값은 스레드 프록시가 Activate 메서드에 대한 응답으로 Deactivate 메서드에서 반환되었음을 나타냅니다.false의 값은 스레드 프록시가 리소스 관리자에서 알림 이벤트에 응답하여 메서드에서 반환되었음을 나타냅니다.UMS(User-Mode Schedulable) 스레드 스케줄러에서 이는 항목이 스케줄러의 완성 목록에 나타났고 스케줄러가 이를 처리해야 함을 나타냅니다.

설명

스케줄러에서 작업을 찾을 수 없을 때 가상 프로세서 루트 실행을 일시적으로 중지하려면 이 메서드를 사용합니다.Deactivate 메서드에 대한 호출은 가상 프로세서 루트가 마지막으로 활성화된 실행 컨텍스트의 Dispatch 메서드 내에서 시작되어야 합니다.즉, Deactivate 메서드를 호출하는 스레드 프록시는 현재 가상 프로세서 루트에서 실행되고 있는 것이어야 합니다.실행되고 있지 않은 가상 프로세서 루트에서 메서드를 호출하면 정의되지 않은 동작이 발생할 수 있습니다.

비활성된 가상 프로세서 루트는 Deactivate 메서드에 전달된 것과 같은 인수를 사용하여 Activate 메서드에 대한 호출을 시작했을 수 있습니다.스케줄러는 ActivateDeactivate 메서드가 쌍을 이룰 수 있도록 해주지만 특정 순서로 받을 필요는 없습니다.리소스 관리자는 Deactivate 메서드에 대한 호출을 받기 전에 Activate 메서드에 대한 호출을 받아 처리할 수 있습니다.

가상 프로세서 루트가 활성화되고 Deactivate 메서드의 반환 값이 값 false인 경우 스케줄러는 UMS 완성 목록을 IUMSCompletionList::GetUnblockNotifications 메서드를 통해 쿼리하고 해당 정보를 작업한 다음 이후에 Deactivate 메서드를 다시 호출합니다.이는 Deactivate 메서드가 값 true를 반환할 때까지 반복해야 합니다.

인수 pContext에 값 NULL이 있는 경우 invalid_argument가 throw됩니다.

가상 프로세스 루트가 활성화되지 않았거나 인수 pContext가 이 가상 프로세서 루트에 의해 최근 디스패치된 예외 컨텍스트를 나타내지 않은 경우 invalid_operation이 throw됩니다.

가상 프로세서 루트를 비활성화하는 동작은 내부 하드웨어 스레드의 구독 수준을 1씩 감소시킵니다.구독 수준에 대한 자세한 내용은 IExecutionResource::CurrentSubscriptionLevel을 참조하십시오.

요구 사항

헤더: concrtrm.h

네임 스페이스: 동시성

참고 항목

참조

IVirtualProcessorRoot 구조체

IVirtualProcessorRoot::Activate 메서드

IExecutionResource::CurrentSubscriptionLevel 메서드

IUMSCompletionList::GetUnblockNotifications 메서드