Condividi tramite


Metodo IThreadProxy::SwitchOut

Dissocia il contesto dalla directory principale virtuale del processore sottostante.

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

Parametri

  • switchState
    Indica lo stato del proxy del thread che sta eseguendo l'opzione.Il parametro è di tipo SwitchingProxyState.

Note

Usa SwitchOut se è necessario dissociare un contesto dalla directory principale virtuale del processore è in esecuzione, per qualsiasi motivo.Sulla base del valore viene passato al parametro switchState, e indipendentemente dal fatto che è in esecuzione su una directory principale virtuale del processore, la chiamata verrà restituito immediatamente o bloccare il proxy di thread associato al contesto.È un errore chiamare SwitchOut con il parametro impostato su Idle.In questo modo verrà generato un invalid_argument eccezione.

SwitchOutè utile quando si desidera ridurre il numero di radici di processore virtuale che è l'utilità di pianificazione, perché il gestore delle risorse sono state fornite istruzioni per effettuare questa operazione oppure perché richiesta una radice temporanea processore virtuale oversubscribed e terminato con esso.In questo caso è necessario richiamare il metodo IVirtualProcessorRoot::Remove nella directory principale virtuale del processore, prima di effettuare una chiamata a SwitchOut con il parametro switchState impostato su Blocking.In questo modo verrà bloccati del proxy di thread e riprenderà l'esecuzione quando una directory principale virtuale diversa del processore nella pianificazione è disponibile per eseguirlo.È possibile ripristinare il proxy del thread di blocco chiamando la funzione SwitchTo per passare al contesto di esecuzione di questo proxy del thread.È possibile ripristinare anche il proxy del thread, tramite il relativo contesto associato per attivare una radice del processore virtuale.Per ulteriori informazioni su come effettuare questa operazione, vedere IVirtualProcessorRoot::Activate.

SwitchOutpuò essere utilizzato anche quando si desidera reinizializzare il processore virtuale in modo che può essere attivato in futuro mentre il blocco del proxy di thread o lo scollegamento temporaneamente dalla directory principale virtuale del processore è in esecuzione su e l'utilità di pianificazione sta inviando il lavoro per.Usa SwitchOut con il parametro switchState impostato su Blocking se si desidera bloccare il proxy di thread.Potete successivamente ripresa utilizzando uno SwitchTo o IVirtualProcessorRoot::Activate come indicato in precedenza.Usa SwitchOut con il parametro impostato su Nesting quando si desidera scollegare temporaneamente dalla directory principale virtuale del processore è in esecuzione su questo proxy di thread e l'utilità di pianificazione processore virtuale è associato.Chiamata di SwitchOut con il parametro switchState impostato su Nesting mentre è in esecuzione su una directory principale virtuale processore causa principale reinizializzare e proxy corrente di thread per continuare l'esecuzione senza la necessità di uno.Il proxy di thread viene considerato hanno lasciato l'utilità di pianificazione fino a quando non viene chiamato il IThreadProxy::SwitchOut metodo con Blocking in un secondo momento.La seconda chiamata a SwitchOut con il parametro impostato su Blocking è destinato a restituire il contesto di uno stato bloccato in modo che può essere ripreso da una SwitchTo o IVirtualProcessorRoot::Activate nell'utilità di pianificazione scollegato da.Poiché non era in esecuzione su una directory principale virtuale del processore, non la reinizializzazione viene eseguita.

Una radice reinizializzato processore virtuale non è diversa da una directory principale del processore virtuale nuovo che l'utilità di pianificazione è stata concessa dal gestore delle risorse.È possibile utilizzarlo per l'esecuzione tramite l'attivazione con un contesto di esecuzione utilizzando IVirtualProcessorRoot::Activate.

È necessario chiamare SwitchOut sull'interfaccia IThreadProxy che rappresenta il thread attualmente in esecuzione altrimenti i risultati non saranno definiti.

Nelle librerie e intestazioni fornite con Visual Studio 2010, questo metodo non hanno un parametro e non è stata reinizializzare la radice di processore virtuale.Per conservare il vecchio comportamento quando esegue l'aggiornamento a Visual Studio 2012, il valore del parametro predefinito di Blocking viene fornito.

Requisiti

Header: concrtrm.h

Spazio dei nomi: la concorrenza

Vedere anche

Riferimenti

Struttura IThreadProxy