IThreadProxy::SwitchOut 方法
解除關聯的內容,從底層的虛擬處理器根目錄。
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
參數
- switchState
表示正在執行切換之執行緒 Proxy 的狀態。 參數的類型為 SwitchingProxyState。
備註
使用SwitchOut如果您要停止執行,因為任何原因而虛擬處理器根目錄中的內容的關聯。 值視您所傳遞給參數switchState,及是否它正在執行中虛擬處理器根,呼叫會立即傳回或是封鎖與內容關聯的執行緒 proxy。 就會發生錯誤,以呼叫SwitchOut參數設定為Idle。 這樣會導致 invalid_argument 例外狀況。
SwitchOut當您想要減少您的排程器,可能是因為資源管理員已指示您執行這項操作,或是您所要求的暫時 oversubscribed 虛擬處理器根,並完成使用後的虛擬處理器根的數目,則會很有用。 在此情況下應該叫用方法IVirtualProcessorRoot::Remove虛擬處理器根目錄上,進行呼叫之前,先SwitchOut與參數一起switchState設定為 [ Blocking。 這將會封鎖執行緒 proxy,直接執行,您可以使用不同的虛擬處理器根排程器中時,便會繼續執行。 呼叫SwitchTo 切換到這個執行緒 Proxy 的執行內容,即可恢復封鎖執行緒 Proxy。 您也可以藉由使用與執行緒 Proxy 相關的內容啟動虛擬處理器根,以恢復執行該執行緒 Proxy。 如需如何這麼做的詳細資訊,請參閱 IVirtualProcessorRoot::Activate。
SwitchOut可能還用當您想重新初始化虛擬處理器,因此它可能會在未來當啟動封鎖執行緒 proxy 或暫時從虛擬處理器根中斷連結執行,而且排程器它已分派的工時。 使用SwitchOut與參數一起switchState設定為 [ Blocking如果您想要封鎖執行緒 proxy。 所以可以稍後再繼續使用SwitchTo或IVirtualProcessorRoot::Activate如上文所述。 使用SwitchOut參數設定為Nesting何時想要暫時中斷連結從虛擬處理器根目錄,執行這個執行緒 proxy 及排程器虛擬處理器是相關聯。 呼叫SwitchOut與參數一起switchState設定為 [ Nesting虛擬處理器根目錄上執行時,會導致重新初始化根 ca 與目前執行緒 proxy 來繼續執行而不需要一項。 執行緒 proxy 會被視為已離開排程器,直到它會呼叫 IThreadProxy::SwitchOut 方法以Blocking以後的時間。 第二次呼叫SwitchOut參數設定為Blocking要傳回內容已封鎖的狀態,所以可依下列繼續往SwitchTo或IVirtualProcessorRoot::Activate它和中斷連接的排程器中。 因為它並未在執行虛擬處理器根目錄上,則不需要重新初始化會發生。
重新初始化虛擬處理器根是全新的虛擬處理器根,您的排程器已授與資源管理員從沒什麼兩樣。 使用來執行它啟動與執行內容使用IVirtualProcessorRoot::Activate。
必須在目前執行執行緒或結果未定義的 IThreadProxy 介面上呼叫 SwitchOut。
在文件庫和隨附於 Visual Studio 2010年標頭中,這個方法未執行參數,而且未重新初始化虛擬處理器根。 若要保留舊的行為,當您升級至預設參數值的 Visual Studio 2012年Blocking提供。
需求
標頭: concrtrm.h
Namespace: 並行存取