Método de IThreadProxy::SwitchOut
Desassocia o contexto da raiz virtual do processador subjacente.
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
Parâmetros
- switchState
Indica o estado do proxy thread que está executando o switch.O parâmetro é do tipo SwitchingProxyState.
Comentários
Use SwitchOut se você precisar desassociar um contexto da raiz do processador virtual está sendo executado, por qualquer motivo.Dependendo do valor você passar para o parâmetro switchState, e se ele está em execução em uma raiz virtual do processador, ou não a chamada irá retornar imediatamente ou bloquear o proxy thread associado com o contexto.É um erro ao chamar SwitchOut com o parâmetro definido Idle.Isso resultará em um invalid_argument exceção.
SwitchOuté útil quando você deseja reduzir o número de raízes de processador virtual que tem seu Agendador, porque o Gerenciador de recursos tem instruído a fazer isso, ou porque você solicitou uma raiz temporário processador virtual assinadas e feito com ele.Nesse caso, você deve chamar o método IVirtualProcessorRoot::Remove na raiz virtual do processador, antes de fazer uma chamada para SwitchOut com o parâmetro switchState definido como Blocking.Isso bloqueará o proxy de thread e ele continuará a execução quando uma raiz virtual de processador diferente no Agendador está disponível para executá-lo.O proxy bloqueio de thread pode ser reiniciado chamando a função SwitchTo para alternar para o contexto de execução do proxy de thread.Você também pode reiniciar proxy thread, usando seu contexto associado para ativar uma raiz virtual do processador.Para obter mais informações sobre como fazer isso, consulte IVirtualProcessorRoot::Activate.
SwitchOuttambém pode ser usado quando você deseja reinicializar o processador virtual para que ele pode ser ativado no futuro enquanto o proxy thread de bloqueio ou desconectá-lo temporariamente da raiz do processador virtual está sendo executado no e o Agendador está distribuindo trabalho para.Use SwitchOut com o parâmetro switchState definido como Blocking se você deseja bloquear o proxy thread.Ele mais tarde pode ser reiniciado usando SwitchTo ou IVirtualProcessorRoot::Activate como indicado acima.Use SwitchOut com o parâmetro definido Nesting quando você deseja desanexar temporariamente esse proxy thread da raiz processador virtual está sendo executado no e o Agendador processador virtual está associado.Chamando SwitchOut com o parâmetro switchState definido como Nesting durante a execução na raiz de uma processador virtual fará com que a raiz para ser reinicializada e o proxy thread atual para continuar a execução sem a necessidade de um.O proxy thread é considerado para ter deixado o Agendador até que ele chama o IThreadProxy::SwitchOut método com Blocking em um momento posterior.A segunda chamada para SwitchOut com o parâmetro definido Blocking destina-se para retornar o contexto para um estado bloqueado para que podem ser retomada por um SwitchTo ou IVirtualProcessorRoot::Activate nele desanexado do Agendador.Porque não estava sendo executado em uma raiz virtual do processador, sem a reinicialização ocorre.
Uma raiz reinicializada processador virtual não é diferente de uma nova raiz de processador virtual que do Agendador foi concedido pelo Gerenciador de recursos.Pode ser usada para execução ativando-o com um contexto de execução com IVirtualProcessorRoot::Activate.
SwitchOutdeve ser chamado na IThreadProxy interface que representa o thread atualmente em execução ou os resultados são indefinidos.
Em bibliotecas e cabeçalhos fornecidos com Visual Studio 2010, esse método não levou um parâmetro e não reinicializar a raiz virtual do processador.Para preservar o antigo comportamento ao atualizar para o Visual Studio 2012, o valor de parâmetro padrão de Blocking é fornecido.
Requisitos
Cabeçalho: concrtrm.h
Namespace: concorrência