Compartilhar via


Método IThreadProxy::SwitchOut

Desassocia o contexto da raiz virtual subjacente do processador.

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

Parâmetros

  • switchState
    Indica o estado do proxy de segmento que está executando a opção. O parâmetro é do tipo SwitchingProxyState.

Comentários

Use SwitchOut se você precisar dissociar um contexto da raiz do processador virtual que está sendo executado, por alguma razão. Dependendo do valor que você passou no parâmetro switchState, e estando ele ou não sendo executado em uma raiz virtual do processador, a chamada retornará imediatamente ou bloqueará o proxy do segmento associado com o contexto. É um erro para chamar SwitchOut com o parâmetro definido como Idle. Isso resultará em uma exceção de invalid_argument.

SwitchOut é útil quando você deseja reduzir o número de raízes de processador virtual que o seu agendador tem, ou porque o Gerenciador de Recursos o instruiu a fazê-lo ou porque você solicitou uma raiz de processador virtual temporária sobrecarregada e não vai mais usá-la. Nesse caso você deve chamar o método de IVirtualProcessorRoot::Remove Method na raiz do processador virtual, antes de fazer uma chamada a SwitchOut com o parâmetro switchState definido como Blocking. Isso bloqueará o proxy de thread e retomará a execução quando uma raiz diferente do processador virtual no agendador estiver disponível para executá-lo. O proxy do thread de bloqueio pode ser retomado chamando a função SwitchTo para alternar para o contexto de execução desse proxy de thread. Você também pode retomar o proxy de thread, usando seu contexto associado para ativar uma raiz virtual do processador. Para obter mais informações sobre como fazer isso, consulte IVirtualProcessorRoot::Activate.

SwitchOut também pode ser usado quando você deseja reinicializar o processador virtual para que ele possa ser ativado no futuro durante o bloqueio do proxy de thread ou a sua desanexação temporária da raiz do processador virtual em que está sendo executado e do agendador para o qual ele está distribuindo trabalho. Use SwitchOut com o parâmetro switchState definido como Blocking se desejar bloquear o proxy de thread. Pode ser retomado posteriormente usando SwitchTo ou IVirtualProcessorRoot::Activate conforme mencionado acima. Use SwitchOut com o parâmetro definido como Nesting quando desejar desanexar temporariamente este proxy de thread da raiz do processador virtual no qual ele está sendo executado e o agendador ao qual o processador virtual está associado. A chamada SwitchOut com o parâmetro switchState definido como Nesting, quando executado em uma raiz virtual do processador, fará com que a raiz seja reinicializada e o proxy de thread atual continue a execução sem a necessidade de uma. O proxy do thread precisa deixar o agendador até que chame o método IThreadProxy::SwitchOut com Blocking em um momento posterior. A segunda chamada a SwitchOut com o parâmetro definido como Blocking é destinada a retornar o contexto para um estado bloqueado, de modo que possa ser retornado por SwitchTo ou IVirtualProcessorRoot::Activate no agendador do que se desconectou. Como ele não estava sendo executando em uma raiz virtual do processador, nenhuma reinicialização ocorre.

Uma raiz do processador virtual reinicializada não é diferente de uma nova raiz do processador virtual que seu agendador recebeu do Gerenciador de Recursos. Você pode utilizá-lo para a execução ativando-o com um contexto de execução usando IVirtualProcessorRoot::Activate.

SwitchOut deve ser chamado na interface IThreadProxy que representa o thread em execução no momento ou os resultados serão indefinidos.

Nas bibliotecas e cabeçalhos que acompanham o Visual Studio 2010, este método não recebe um parâmetro e não reinicializa a raiz virtual do processador. Para preservar o comportamento antigo, o valor de parâmetro padrão de Blocking é fornecido.

Requisitos

Cabeçalho: concrtrm.h

Namespace: simultaneidade

Consulte também

Referência

Estrutura IThreadProxy