共用方式為


IVirtualProcessorRoot::Deactivate 方法

會導致目前正在這個虛擬處理器根上執行的在執行緒 Proxy 停止分派執行內容。 執行緒 Proxy 會繼續執行 Activate 方法呼叫。

virtual bool Deactivate(
   _Inout_ IExecutionContext * pContext
) =0;

參數

  • pContext
    目前由這個根所分派的內容。

傳回值

布林值。 true 值表示回應 Activate 方法呼叫而從 Deactivate 方法傳回的執行緒 Proxy。 false 值表示方法回應資源管理員中的通知事件而傳回的執行緒 Proxy。 在使用者模式可排程 (UMS) 執行緒排程器上,這表示項目已經出現在排程器的完成清單上,需要排程器才能處理它們。

備註

在您的排程器中找不到任何工作時,使用這個方法暫時停止執行虛擬處理器根。 Deactivate 方法的呼叫必須來自虛擬處理器根上次啟動與執行內容 Dispatch 方法內。 換句話說,叫用Deactivate 方法的執行緒 Proxy 必須是目前在虛擬處理器根執行的執行緒 Proxy。 在您未執行的虛擬處理器根上呼叫方法可能會造成未定義的行為。

若以傳遞 Deactivate 方法的同一個引數呼叫Activate 方法,可能會喚醒已停用的虛擬處理器根。 排程器負責確保 ActivateDeactivate 方法的呼叫都成對,但是它們並不需要以特定順序接收。 接收正確的 Deactivate 方法呼叫前,資源管理員可以處理接收Activate 方法呼叫。

如果虛擬處理器根甦醒,同時 Deactivate 方法傳回的值是 false 值,排程器應該透過 IUMSCompletionList::GetUnblockNotifications 方法查詢 UMS 完成清單,並根據該資訊行動,然後再次呼叫 Deactivate 方法。 這應該重複直到 Deactivate 方法傳回值 true

如果引數 pContext 具有值 NULL,就會擲回 invalid_argument

如果從未啟動虛擬處理器根,或引數 pContext 不能代表這個虛擬處理器根最近分派的執行內容,則會擲回 invalid_operation

停用虛擬處理器根的動作會將基礎硬體執行緒訂閱層級減少一。 如需訂閱層級的詳細資訊,請參閱 IExecutionResource::CurrentSubscriptionLevel

需求

標頭: concrtrm.h

Namespace: 並行存取

請參閱

參考

IVirtualProcessorRoot 結構

IVirtualProcessorRoot::Activate 方法

IExecutionResource::CurrentSubscriptionLevel 方法

IUMSCompletionList::GetUnblockNotifications 方法