IThreadProxy::SwitchOut 方法
解除基底虛擬處理器根的內容。
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
參數
- switchState
表示正在執行切換之執行緒 Proxy 的狀態。 參數的類型為 SwitchingProxyState。
備註
如果需要分離虛擬處理器根目錄執行的內容,不論任何理由,請使用 SwitchOut。 根據您傳遞給 switchState參數的值和其是否會在虛擬處理器根目錄上執行,呼叫會立即傳回或是封鎖執行緒 Proxy 的內容。 將參數設定為 Idle 並呼叫 SwitchOut 是錯誤的 。 這麼做會造成 invalid_argument 例外狀況。
當您想要減少排程器具有的虛擬處理器根目錄數目時 (無論因為資源管理員的指示或您要求暫時過度訂閱虛擬處理器並且已完成處理),SwitchOut 這個方法很有用。 此時,在呼叫 SwitchOut 並設定 switchState 參數為 Blocking 之前,您應該叫用在虛擬處理器根目錄上的 IVirtualProcessorRoot::Remove Method。 這將封鎖執行緒 Proxy ,且當排程中的不同虛擬處理器根目錄可用於執行時,就可以繼續執行。 呼叫SwitchTo 切換到這個執行緒 Proxy 的執行內容,即可恢復封鎖執行緒 Proxy。 您也可以藉由使用與執行緒 Proxy 相關的內容啟動虛擬處理器根,以恢復執行該執行緒 Proxy。 如需如何這麼做的詳細資訊,請參閱 IVirtualProcessorRoot::Activate。
當您想要重新初始化虛擬處理器,讓您發生封鎖執行緒 Proxy ,或暫時中斷虛擬處理器和排程器根上的工作時,可在未來啟動,您可以使用 SwitchOut。 如果要封鎖執行緒 Proxy,請使用 SwitchOut 並將 switchState 參數設定為 Blocking。 它可以使用 SwitchTo 或 IVirtualProcessorRoot::Activate 來重新啟動,如上所述。 當您想要暫時中斷虛擬處理器根目錄上的執行緒 Proxy,和關聯排程器上的行程,請使用 SwitchOut 並將參數設定為 Nesting。 在虛擬器上執行時造成重新初始化,且讓目前執行緒在不被需要的情況下被繼續執行時,請呼叫 SwitchOut 並將 switchState 參數設定為 Nesting。 在呼叫 IThreadProxy::SwitchOut 方法,和稍候的 Blocking 後,執行緒 Proxy 會被視為已離開排程器。 第二次呼叫 SwitchOut ,並將參數設定為 Blocking 會傳回內容到受阻狀態,以使其能藉由在排程器中斷的 SwitchTo 或 IVirtualProcessorRoot::Activate 來重新啟動。 因為某個虛擬處理器根目錄沒有執行,所以不會發生重新初始化。
已重新初始化的虛擬處理器根目錄,與資源管理員授與全新排程器的虛擬處理器沒有任何不同。 藉由使用 IVirtualProcessorRoot::Activate ,您可以使用它來啟動執行內容。
必須在目前執行執行緒或結果未定義的 IThreadProxy 介面上呼叫 SwitchOut。
在隨附於 Visual Studio 2010 的程式庫和標頭,這個方法並不使用參數,也沒有重新初始化虛擬處理器根目錄。 若要儲存舊行為,預設會提供 Blocking 的參數值。
需求
標頭: concrtrm.h
**命名空間:**concurrency