Partilhar via


Método IVirtualProcessorRoot::Deactivate

Faz com que o proxy do thread que executa atualmente nessa raiz virtual do processador para parar de expedir o contexto de execução. O proxy do thread continuará executar em uma chamada para o método de Activate .

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

Parâmetros

  • pContext
    O contexto em que está sendo enviados atualmente por essa raiz.

Valor de retorno

Um valor booliano. Um valor de true indica que o proxy do thread retornado pelo método de Deactivate em resposta a uma chamada ao método de Activate . Um valor de false indica que o proxy do thread retornado pelo método em resposta a um evento de notificação no Gerenciador de Recursos. Em um agendador schedulable de thread (UMS) de modo de usuário, isso indica que os itens apareceram na lista de conclusão de agendador, e o agendador é necessário tratam.

Comentários

Use esse método para interromper temporariamente a execução de uma raiz virtual do processador quando você não puder localizar nenhum trabalho no agendador. Uma chamada para o método de Deactivate deve originar-se de dentro do método de Dispatch do contexto de execução que a raiz virtual do processador foi ativado com. Ou seja o proxy do thread que invoca o método de Deactivate deve ser o que está sendo executadas atualmente na raiz virtual do processador. Chame o método em uma raiz do processador virtual que não está sendo executado pode resultar em comportamento indefinido.

Uma raiz virtual desativada de processador pode ser acordada com uma chamada ao método de Activate , com o mesmo argumento que foi passado ao método de Deactivate . O agendador é responsável para assegurar que chama a Activate e os métodos de Deactivate estão formando, mas não são necessários para ser recebidos em uma ordem específica. O Gerenciador de Recursos pode manipular o recebimento de uma chamada ao método de Activate antes que recebe uma chamada ao método de Deactivate se significou para.

Se uma raiz virtual do processador desperta e o valor de retorno do método de Deactivate é o valor false, o agendador deve ver a lista pelo método de IUMSCompletionList::GetUnblockNotifications , ato de conclusão UMS nessas informações, e em seguida chama o método de Deactivate novamente. Isso deve ser repetido até que essa hora como o método de Deactivate retorna o valor true.

invalid_argument será lançada se o argumento pContext tem o valor NULL.

invalid_operation será lançada se a raiz virtual do processador foi ativada, nunca ou o argumento pContext não representa o contexto de execução que foi despachados recentemente por essa raiz virtual do processador.

O ato de desativar uma raiz virtual do processador diminui a assinatura no nível de threads de hardware subjacente por uma. Para obter mais informações sobre os níveis de assinatura, consulte IExecutionResource::CurrentSubscriptionLevel.

Requisitos

Cabeçalho: concrtrm.h

Namespace: simultaneidade

Consulte também

Referência

Estrutura IVirtualProcessorRoot

Método IVirtualProcessorRoot::Activate

Método IExecutionResource::CurrentSubscriptionLevel

Método IUMSCompletionList::GetUnblockNotifications