IThreadProxy::SwitchTo 方法
執行從目前正在執行內容的合作內容切換至另一個內容。
virtual void SwitchTo(
_Inout_ IExecutionContext * pContext,
SwitchingProxyState switchState
) =0;
參數
pContext
配合切換的執行內容。switchState
表示正在執行切換之執行緒 Proxy 的狀態。 參數的類型為 SwitchingProxyState。
備註
透過第一個執行內容的 IExecutionContext::Dispatch 方法,使用這個方法從一個執行內容切換至另一個。 此方法會將執行內容 pContext 與執行緒 Proxy 產生關聯 (如果其中尚未具有任何關聯)。 目前執行緒 Proxy 的擁有權是由您為 switchState 引數指定的值來決定。
若要將目前執行中的執行緒 Proxy 傳回資源管理員,請使用值 Idle。 將參數 switchState 設為 Idle 來呼叫 SwitchTo將導致執行內容 pContext 啟動基礎執行資源上執行。 此執行緒 Proxy 的擁有權會轉移到資源管理員,而且您應該在 SwitchTo 傳回後立刻從執行內容的 Dispatch 傳回,以完成轉移。 執行緒 Proxy 分派的執行內容會與執行緒 Proxy 解除關聯,而且排程器可以重複使用或適時加以終結。
若希望這個執行緒 Proxy 進入封鎖的狀態,請值 Blocking。 將 switchState 參數設為 Blocking 來呼叫 SwitchTo 將導致執行內容 pContext 開始執行,並封鎖目前的執行緒 Proxy,直到它會繼續執行。 當執行緒 Proxy 處於 Blocking 狀態時,排程器會保留執行緒 Proxy 的擁有權。 呼叫SwitchTo 切換到這個執行緒 Proxy 的執行內容,即可恢復封鎖執行緒 Proxy。 您也可以藉由使用與執行緒 Proxy 相關的內容啟動虛擬處理器根,以恢復執行該執行緒 Proxy。 如需如何這麼做的詳細資訊,請參閱 IVirtualProcessorRoot::Activate。
若要暫時中斷連結這個執行緒 Proxy 與執行它的虛擬處理器根,請使用值 Nesting 和分派它進行工作的排程器。 將參數 switchState設為 Nesting 來呼叫 SwitchTo 將導致執行內容pContext開始執行,而且目前的執行緒 Proxy 也會繼續執行,不需要虛擬處理器根。 執行緒 Proxy 會被視為已離開排程器,直到稍後呼叫 方法為止。 IThreadProxy::SwitchOut 方法可以封鎖執行緒 Proxy,直到虛擬處理器根可用重排它為止。
必須在目前執行執行緒或結果未定義的 IThreadProxy 介面上呼叫 SwitchTo。 如果將 pContext 屬性設定為 NULL,還是便會擲回 invalid_argument。
需求
標頭: concrtrm.h
Namespace: 並行存取