CurrentScheduler 類別
代表與呼叫內容相關之目前排程器的抽象概念。
語法
class CurrentScheduler;
成員
公用方法
名稱 | 描述 |
---|---|
建立 | 建立新的排程器,其行為是由 _Policy 參數描述,並將它附加至呼叫內容。 新建立的排程器將會成為呼叫內容的目前排程器。 |
CreateScheduleGroup | 已多載。 在與呼叫內容相關聯的排程器內建立新的排程群組。 採用 參數 _Placement 的版本會導致新建立的排程群組內的工作偏向於在該參數所指定的位置執行。 |
卸離 | 如果目前排程器存在,請將目前排程器與呼叫內容中斷連結,並將先前附加的排程器還原為目前的排程器。 在此方法傳回之後,呼叫內容會由先前使用 CurrentScheduler::Create 或 Scheduler::Attach 方法附加至內容的排程器管理。 |
Get | 傳回與呼叫內容相關聯的排程器指標,也稱為目前排程器。 |
GetNumberOfVirtualProcessors | 傳回與呼叫內容相關聯之排程器的目前虛擬處理器數目。 |
GetPolicy | 傳回目前排程器建立原則的複本。 |
Id | 傳回目前排程器的唯一標識符。 |
IsAvailableLocation | 判斷某一特定位置是否可在目前的排程器中使用。 |
RegisterShutdownEvent | 當與目前內容相關聯的排程器關閉並終結本身時,會導致傳入 參數的 _ShutdownEvent Windows 事件句柄發出訊號。 當事件發出訊號時,已排程給排程器的所有工作都會完成。 您可以透過此方法註冊多個關機事件。 |
ScheduleTask | 已多載。 在與呼叫內容相關聯的排程器內排程輕量級工作。 輕量工作會置於執行階段所決定的排程群組中。 採用 _Placement 參數的版本會造成工作在指定的位置變成優先執行。 |
備註
如果沒有與呼叫內容相關聯的排程器(請參閱 排程器),類別中的 CurrentScheduler
許多方法將會導致進程的預設排程器附件。 這也表示進程的預設排程器是在這類呼叫期間建立的。
繼承階層架構
CurrentScheduler
需求
標頭: concrt.h
命名空間: concurrency
建立
建立新的排程器,其行為是由 _Policy
參數描述,並將它附加至呼叫內容。 新建立的排程器將會成為呼叫內容的目前排程器。
static void __cdecl Create(const SchedulerPolicy& _Policy);
參數
_政策
描述新建立排程器行為的排程器原則。
備註
排程器對呼叫內容的附件會隱含地將參考計數放在排程器上。
使用 Create
方法建立排程器之後,您必須在未來某個時間點呼叫 CurrentScheduler::D etach 方法,才能讓排程器關閉。
如果從已經附加至不同排程器的內容呼叫這個方法,則會將現有的排程器記住為先前的排程器,而新建立的排程器會變成目前的排程器。 當您 CurrentScheduler::Detach
在稍後呼叫 方法時,先前的排程器會還原為目前的排程器。
此方法可以擲回各種例外狀況,包括 scheduler_resource_allocation_error 和 invalid_scheduler_policy_value。
CreateScheduleGroup
在與呼叫內容相關聯的排程器內建立新的排程群組。 採用 參數 _Placement
的版本會導致新建立的排程群組內的工作偏向於在該參數所指定的位置執行。
static ScheduleGroup* __cdecl CreateScheduleGroup();
static ScheduleGroup* __cdecl CreateScheduleGroup(location& _Placement);
參數
_放置
排程群組中工作會偏向於執行位置的位置參考。
傳回值
新建立排程群組的指標。 這個 ScheduleGroup
物件上放置了初始參考計數。
備註
如果呼叫的內容目前沒有任何相關聯的排程器,則這個方法會將處理序的預設排程器建立及/或附加至呼叫的內容。
當您完成排程工作時,必須在排程群組上叫 用 Release 方法。 排程器會在排入佇列的所有工作完成時終結排程群組。
請注意,如果您明確建立此排程器,您必須先釋放其內所有排程群組的參考,才能在排程器上釋放參考,方法是將目前內容與排程器中斷連結。
中斷連結
如果目前排程器存在,請將目前排程器與呼叫內容中斷連結,並將先前附加的排程器還原為目前的排程器。 在此方法傳回之後,呼叫內容會由先前使用 CurrentScheduler::Create
或 Scheduler::Attach
方法附加至內容的排程器管理。
static void __cdecl Detach();
備註
方法 Detach
會隱含地從排程器中移除參考計數。
如果沒有附加至呼叫內容的排程器,呼叫這個方法會導致 擲回scheduler_not_attached 例外狀況。
從排程器內部和管理的內容呼叫這個方法,或是使用 Scheduler::Attach 或 CurrentScheduler::Create 方法以外的方法附加的內容,將會導致擲回improper_scheduler_detach例外狀況。
取得 Yammer
傳回與呼叫內容相關聯的排程器指標,也稱為目前排程器。
static Scheduler* __cdecl Get();
傳回值
與呼叫內容相關聯之排程器的指標(目前的排程器)。
備註
如果呼叫的內容目前沒有任何相關聯的排程器,則這個方法會將處理序的預設排程器建立及/或附加至呼叫的內容。 這個方法所傳回的物件 Scheduler
上不會有其他參考。
GetNumberOfVirtualProcessors
傳回與呼叫內容相關聯之排程器的目前虛擬處理器數目。
static unsigned int __cdecl GetNumberOfVirtualProcessors();
傳回值
如果排程器與呼叫內容相關聯,該排程器的目前虛擬處理器數目;否則為 值 -1
。
備註
如果呼叫內容尚未與排程器相關聯,這個方法將不會產生排程器附件。
這個方法的傳回值是與呼叫內容相關聯之排程器虛擬處理器數目的實時取樣。 這個值傳回時可能已過時。
GetPolicy
傳回目前排程器建立原則的複本。
static SchedulerPolicy __cdecl GetPolicy();
傳回值
建立目前排程器的原則複本。
備註
如果呼叫的內容目前沒有任何相關聯的排程器,則這個方法會將處理序的預設排程器建立及/或附加至呼叫的內容。
Id
傳回目前排程器的唯一標識符。
static unsigned int __cdecl Id();
傳回值
如果排程器與呼叫內容相關聯,則為該排程器的唯一標識符;否則為 值 -1
。
備註
如果呼叫內容尚未與排程器相關聯,這個方法將不會產生排程器附件。
IsAvailableLocation
判斷某一特定位置是否可在目前的排程器中使用。
static bool __cdecl IsAvailableLocation(const location& _Placement);
參數
_放置
要查詢目前排程器的位置參考。
傳回值
指出目前排程器上是否有提供 _Placement
引數所指定的位置。
備註
如果呼叫內容尚未與排程器相關聯,這個方法將不會產生排程器附件。
請注意,傳回值是某一特定位置是否可用的瞬間取樣。 若有多個排程器,動態資源管理可以隨時在排程器中加入或移除資源。 如果發生這種情況,這個特定位置的可用性可能會改變。
RegisterShutdownEvent
當與目前內容相關聯的排程器關閉並終結本身時,會導致傳入 參數的 _ShutdownEvent
Windows 事件句柄發出訊號。 當事件發出訊號時,已排程給排程器的所有工作都會完成。 您可以透過此方法註冊多個關機事件。
static void __cdecl RegisterShutdownEvent(HANDLE _ShutdownEvent);
參數
_ShutdownEvent
Windows 事件物件的句柄,當與目前內容相關聯的排程器關閉並終結本身時,運行時間會發出訊號。
備註
如果沒有附加至呼叫內容的排程器,呼叫這個方法會導致 擲回scheduler_not_attached 例外狀況。
ScheduleTask
在與呼叫內容相關聯的排程器內排程輕量級工作。 輕量工作會置於執行階段所決定的排程群組中。 採用 _Placement
參數的版本會造成工作在指定的位置變成優先執行。
static void __cdecl ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data);
static void __cdecl ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement);
參數
_Proc
要執行的函式指標,以執行輕量型工作的主體。
_數據
將做為參數傳遞至工作主體之數據的 void 指標。
_放置
輕量工作將會變成優先執行的位置參考。
備註
如果呼叫的內容目前沒有任何相關聯的排程器,則這個方法會將處理序的預設排程器建立及/或附加至呼叫的內容。