Scheduler 類別

代表並行執行階段排程器的抽象概念。

語法

class Scheduler;

成員

受保護的建構函式

名稱 描述
排程器 類別的物件 Scheduler 只能使用 Factory 方法或隱含方式建立。
~Scheduler 解構函式 當類別的所有外部參考都停止存在時,類別的物件 Scheduler 會隱含終結。

公用方法

名稱 描述
附加 將排程器附加至呼叫內容。 此方法傳回之後,呼叫內容會由排程器管理,而排程器會變成目前的排程器。
建立 建立新的排程器,其行為由 _Policy 參數描述、在排程器上放置初始參考,並傳回其指標。
CreateScheduleGroup 已多載。 在排程器內建立新的排程群組。 採用 參數 _Placement 的版本會導致新建立的排程群組內的工作偏向于在該參數所指定的位置執行。
GetNumberOfVirtualProcessors 傳回排程器的目前虛擬處理器數目。
GetPolicy 傳回使用 排程器建立的原則複本。
識別碼 傳回排程器的唯一識別碼。
IsAvailableLocation 判斷指定的位置是否可在排程器上使用。
參考 遞增排程器參考計數。
RegisterShutdownEvent 當排程器關閉並終結本身時,會導致傳入 參數的 _Event Windows 事件控制碼發出訊號。 當事件發出訊號時,已排程給排程器的所有工作都會完成。 您可以透過此方法註冊多個關機事件。
版本 遞減排程器的參考計數。
ResetDefaultSchedulerPolicy 將預設排程器原則重設為執行時間預設值。 下次建立預設排程器時,它會使用執行時間預設原則設定。
ScheduleTask 已多載。 在排程器內排程羽量級工作。 輕量工作會置於執行階段所決定的排程群組中。 採用 _Placement 參數的版本會造成工作在指定的位置變成優先執行。
SetDefaultSchedulerPolicy 可讓使用者定義原則用來建立預設排程器。 只有在進程內沒有預設排程器時,才能呼叫這個方法。 設定預設原則之後,它會維持有效狀態,直到下次呼叫 SetDefaultSchedulerPolicy ResetDefaultSchedulerPolicy 方法為止。

備註

並行執行時間排程器會使用執行內容,其對應至作業系統執行內容,例如執行緒,以執行應用程式排入佇列的工作。 隨時,排程器的並行層級等於 Resource Manager 授與的虛擬處理器數目。 虛擬處理器是處理資源的抽象概念,並對應至基礎系統上的硬體執行緒。 只有單一排程器內容可以在指定的時間在虛擬處理器上執行。

並行執行時間會為每個進程建立預設排程器,以執行平行工作。 此外,您也可以建立自己的排程器實例,並使用這個類別加以操作。

繼承階層架構

Scheduler

需求

標頭: concrt.h

命名空間: concurrency

連結

將排程器附加至呼叫內容。 此方法傳回之後,呼叫內容會由排程器管理,而排程器會變成目前的排程器。

virtual void Attach() = 0;

備註

附加排程器會隱含地將參考放在排程器上。

在未來的某個時間點,您必須呼叫 CurrentScheduler::D etach 方法,才能讓排程器關閉。

如果從已經附加至不同排程器的內容呼叫這個方法,則會將現有的排程器記住為先前的排程器,而新建立的排程器會變成目前的排程器。 當您 CurrentScheduler::Detach 在稍後呼叫 方法時,先前的排程器會還原為目前的排程器。

如果這個排程器是呼叫內容的目前排程器,這個方法會擲回 improper_scheduler_attach 例外狀況。

建立

建立新的排程器,其行為由 _Policy 參數描述、在排程器上放置初始參考,並傳回其指標。

static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);

參數

_政策
描述新建立排程器行為的排程器原則。

傳回值

新建立排程器的指標。 這個 Scheduler 物件上放置了初始參考計數。

備註

使用 Create 方法建立排程器之後,您必須在未來某個時間點呼叫 Release 方法,才能移除初始參考計數,並允許排程器關閉。

使用這個方法建立的排程器不會附加至呼叫內容。 它可以使用 Attach 方法附加至內容

此方法可以擲回各種例外狀況,包括 scheduler_resource_allocation_error invalid_scheduler_policy_value

CreateScheduleGroup

在排程器內建立新的排程群組。 採用 參數 _Placement 的版本會導致新建立的排程群組內的工作偏向于在該參數所指定的位置執行。

virtual ScheduleGroup* CreateScheduleGroup() = 0;

virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;

參數

_位置
排程群組中工作會偏向于執行位置的位置參考。

傳回值

新建立排程群組的指標。 這個 ScheduleGroup 物件上放置了初始參考計數。

備註

當您完成排程工作時,必須在排程群組上叫 用 Release 方法。 排程器會在排入佇列的所有工作完成時終結排程群組。

請注意,如果您明確建立此排程器,您必須先釋放其內排程群組的所有參考,才能在排程器上釋放參考。

GetNumberOfVirtualProcessors

傳回排程器的目前虛擬處理器數目。

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

傳回值

排程器的目前虛擬處理器數目。

GetPolicy

傳回使用 排程器建立的原則複本。

virtual SchedulerPolicy GetPolicy() const = 0;

傳回值

建立排程器的原則複本。

Id

傳回排程器的唯一識別碼。

virtual unsigned int Id() const = 0;

傳回值

排程器的唯一識別碼。

IsAvailableLocation

判斷指定的位置是否可在排程器上使用。

virtual bool IsAvailableLocation(const location& _Placement) const = 0;

參數

_位置
要查詢排程器位置的參考。

傳回值

指出引數所 _Placement 指定的位置是否可在排程器上使用。

備註

請注意,傳回值是某一特定位置是否可用的瞬間取樣。 若有多個排程器,動態資源管理可以隨時在排程器中加入或移除資源。 如果發生這種情況,這個特定位置的可用性可能會改變。

參考

遞增排程器參考計數。

virtual unsigned int Reference() = 0 ;

傳回值

新遞增的參考計數。

備註

這通常用來管理組合排程器的存留期。 當排程器的參考計數變成零時,排程器會於所有工作完成後關機並自行解構。

如果呼叫 Reference 方法之前的參考計數為零,而且呼叫是由排程器所擁有的內容所產生,則方法會擲回 improper_scheduler_reference 例外狀況。

RegisterShutdownEvent

當排程器關閉並終結本身時,會導致傳入 參數的 _Event Windows 事件控制碼發出訊號。 當事件發出訊號時,已排程給排程器的所有工作都會完成。 您可以透過此方法註冊多個關機事件。

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

參數

_事件
Windows 事件物件的控制碼,當排程器關閉並終結本身時,執行時間會發出訊號。

版本

遞減排程器的參考計數。

virtual unsigned int Release() = 0;

傳回值

新遞減的參考計數。

備註

這通常用來管理組合排程器的存留期。 當排程器的參考計數變成零時,排程器會於所有工作完成後關機並自行解構。

ResetDefaultSchedulerPolicy

將預設排程器原則重設為執行時間預設值。 下次建立預設排程器時,它會使用執行時間預設原則設定。

static void __cdecl ResetDefaultSchedulerPolicy();

備註

這個方法可以在進程內有預設排程器時呼叫。 它不會影響現有預設排程器的原則。 不過,如果預設排程器要關機,且稍後將建立新的預設值,新的排程器會使用執行時間預設原則設定。

排程器

類別的物件 Scheduler 只能使用 Factory 方法或隱含方式建立。

Scheduler();

備註

當您使用許多需要附加至呼叫內容的排程器時,會隱含地建立進程的預設排程器。 PPL 和代理程式層類別和功能內 CurrentScheduler 的方法通常會執行隱含附件。

您也可以透過 CurrentScheduler::Create 方法或 Scheduler::Create 方法明確建立排程器。

~調度

當類別的所有外部參考都停止存在時,類別的物件 Scheduler 會隱含終結。

virtual ~Scheduler();

ScheduleTask

在排程器內排程羽量級工作。 輕量工作會置於執行階段所決定的排程群組中。 採用 _Placement 參數的版本會造成工作在指定的位置變成優先執行。

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data) = 0;

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement) = 0;

參數

_Proc
要執行的函式指標,以執行輕量型工作的主體。

_資料
將做為參數傳遞至工作主體之資料的 void 指標。

_位置
輕量工作將會變成優先執行的位置參考。

SetDefaultSchedulerPolicy

可讓使用者定義原則用來建立預設排程器。 只有在進程內沒有預設排程器時,才能呼叫這個方法。 設定預設原則之後,它會維持有效狀態,直到下次呼叫 SetDefaultSchedulerPolicy ResetDefaultSchedulerPolicy 方法為止。

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

參數

_政策
要設定為預設排程器原則的原則。

備註

SetDefaultSchedulerPolicy如果在進程內已有預設排程器時呼叫 方法,執行時間將會擲回 default_scheduler_exists 例外狀況。

另請參閱

concurrency 命名空間
Scheduler 類別
PolicyElementKey
工作排程器