Condividi tramite


Metodo IThreadProxy::SwitchOut

Annulla l'associazione tra il contesto e la radice del processore virtuale 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

Utilizzare SwitchOut se è necessario eliminare l'associazione di un contesto con la radice del processore virtuale che è in esecuzione, per qualsiasi motivo. A seconda del valore passato al parametro switchState e se è oppure no in esecuzione su una radice del processore virtuale, la chiamata restituirà immediatamente o bloccherà il proxy thread associato al contesto. È un errore chiamare SwitchOut con il parametro impostato su Idle. Questa operazione genererà un'eccezione invalid_argument.

SwitchOut è utile quando si desidera ridurre il numero di radici del processore virtuale detenuto dall'utilità di pianificazione, perché Gestione risorse ha dato istruzioni di eseguire tale operazione oppure perché è stata richiesta una radice del processore virtuale temporaneamente in condizione di oversubscription, e sono state eseguite con esso. In questo caso è necessario chiamare il metodo IVirtualProcessorRoot::Remove Method sulla radice del processore virtuale, prima di effettuare la chiamata a SwitchOut con il parametro switchState impostato su Blocking. Questo bloccherà il proxy thread che potrà riprendere l'esecuzione quando una radice del processore virtuale diversa nell'utilità di 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.

SwitchOut può essere utilizzato anche quando si reinizializza il processore virtuale in modo che possa essere attivato in futuro mentre sta bloccando il proxy thread o temporaneamente rimuovendolo dalla radice del processore virtuale in cui è in esecuzione e l'utilità di pianificazione sta inviando il lavoro. Utilizzare SwitchOut con il parametro switchState impostato su Blocking se si desidera bloccare il proxy di thread. Successivamente può essere riattivato tramite SwitchTo o IVirtualProcessorRoot::Activate come indicato in precedenza. Utilizzare SwitchOut con il parametro impostato su Nesting quando si desidera rimuovere temporaneamente questo proxy thread che dalla radice del processore virtuale viene eseguito e l'utilità di pianificazione con la quale il processore virtuale è associata. Chiamando SwitchOut con il parametro switchState impostato su Nesting mentre viene eseguito su una radice del processore virtuale condurrà la radice ad essere reinizializzata e il proxy thread corrente a continuare l'esecuzione senza necessitarne. Il proxy thread è considerato aver lasciato l'utilità di pianificazione finché non chiama il metodo IThreadProxy::SwitchOut con Blocking in un secondo momento. La seconda chiamata a SwitchOut con il parametro impostato su Blocking deve restituire il contesto a uno stato bloccato in modo che possa riprendere da dove SwitchTo o IVirtualProcessorRoot::Activate nell'utilità di pianificazione lo hanno rimosso. Poiché non era in esecuzione su una radice del processore virtuale, non ha luogo la reinizializzazione.

Una radice del processore virtuale reinizializzata non è diversa da una radice del processore virtuale nuova che l'utilità di pianificazione ha concesso da Gestione Risorse. È possibile utilizzarla per l'esecuzione attivandola 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 nelle intestazioni fornite con Visual Studio 2010, questo metodo non richiede un parametro e non reinizializza la radice del processore virtuale. Per mantenere il comportamento precedente, il valore del parametro predefinito Blocking viene fornito.

Requisiti

Header: concrtrm.h

Spazio dei nomi: concorrenza

Vedere anche

Riferimenti

Struttura IThreadProxy