Scheduler 类
表示并发运行时计划程序的抽象。
语法
class Scheduler;
成员
受保护构造函数
名称 | 描述 |
---|---|
计划程序 | Scheduler 类的对象只能使用工厂方法创建,也可以隐式创建。 |
~Scheduler 析构函数 | Scheduler 类的对象在其所有外部引用不复存在时被隐式销毁。 |
公共方法
名称 | 描述 |
---|---|
附加 | 将计划程序附加到调用上下文。 此方法返回后,调用上下文由计划程序管理,计划程序将成为当前计划程序。 |
创建 | 创建一个新的计划程序,其行为由 _Policy 参数描述,在计划程序上放置一个初始引用,并返回一个指向它的指针。 |
CreateScheduleGroup | 已重载。 在计划程序中创建新的计划组。 采用参数 _Placement 的版本会导致新创建的计划组中的任务偏向在该参数指定的位置执行。 |
GetNumberOfVirtualProcessors | 返回计划程序的当前虚拟处理器数量。 |
GetPolicy | 返回创建计划程序的策略的副本。 |
Id | 返回计划程序的唯一标识符。 |
IsAvailableLocation | 确定给定位置在计划程序上是否可用。 |
引用 | 递增计划程序引用计数。 |
RegisterShutdownEvent | 导致在计划程序关闭并自行销毁时,向 _Event 参数中传递的 Windows 事件句柄收到信号。 在事件收到信号时,已计划到计划程序的所有工作都已完成。 可以通过此方法注册多个关闭事件。 |
版本 | 递减计划程序的引用计数。 |
ResetDefaultSchedulerPolicy | 将默认计划程序策略重置为运行时默认值。 下次创建默认计划程序时,它将使用运行时默认策略设置。 |
ScheduleTask | 已重载。 在计划程序中计划轻量级任务。 轻量任务将放置在运行时确定的计划组中。 采用参数 _Placement 的版本导致任务偏向在指定的位置执行。 |
SetDefaultSchedulerPolicy | 允许用户定义的策略用于创建默认计划程序。 仅当进程内不存在默认计划程序时,才能调用此方法。 设置默认策略后,它会一直有效,直到下一次有效调用 SetDefaultSchedulerPolicy 或 ResetDefaultSchedulerPolicy 方法。 |
注解
并发运行时计划程序使用映射到操作系统执行上下文(例如线程)的执行上下文来执行应用程序排队的工作。 在任何时候,计划程序的并发级别都等于资源管理器授予它的虚拟处理器数。 虚拟处理器是处理资源的抽象,映射到基础系统上的硬件线程。 在给定时间,只能在一个虚拟处理器上执行一个计划程序上下文。
并发运行时将为每个进程创建一个默认计划程序以执行并行工作。 此外,还可以创建自己的计划程序实例并使用此类对其进行操作。
继承层次结构
Scheduler
要求
标头:concrt.h
命名空间: 并发
附加
将计划程序附加到调用上下文。 此方法返回后,调用上下文由计划程序管理,计划程序将成为当前计划程序。
virtual void Attach() = 0;
备注
附加计划程序会隐式地将引用放在计划程序上。
在将来的某个时候,必须调用 CurrentScheduler::Detach 方法以允许计划程序关闭。
如果从已附加到其他计划程序的上下文调用此方法,则会将现有计划程序记住为以前的计划程序,而新创建的计划程序将成为当前计划程序。 在以后调用 CurrentScheduler::Detach
方法时,以前的计划程序将还原为当前计划程序。
如果此计划程序是调用上下文的当前计划程序,则此方法将引发 improper_scheduler_attach 异常。
创建
创建一个新的计划程序,其行为由 _Policy
参数描述,在计划程序上放置一个初始引用,并返回一个指向它的指针。
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
参数
_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;
参数
_Placement
对偏向执行计划组内任务的位置的引用。
返回值
指向新创建的计划组的指针。 此 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
对在计划程序中查询的位置的引用。
返回值
有关 _Placement
参数指定的位置在计划程序中是否可用的指示。
备注
注意,返回值是给定位置是否可用的瞬时采样。 在存在多个计划程序时,动态资源管理可以从计划程序中的任意点添加或移除资源。 如果发生这种情况,那么给定位置的可用性会发生更改。
参考
递增计划程序引用计数。
virtual unsigned int Reference() = 0 ;
返回值
新递增的引用计数。
注解
这通常用于管理组合计划程序的生存期。 当计划程序的引用计数降为零时,计划程序将在其所有工作完成后关闭并析构自身。
如果调用 Reference
方法之前的引用计数为零,并且调用是从不属于计划程序的上下文中进行的,则该方法将引发 improper_scheduler_reference 异常。
RegisterShutdownEvent
导致在计划程序关闭并自行销毁时,向 _Event
参数中传递的 Windows 事件句柄收到信号。 在事件收到信号时,已计划到计划程序的所有工作都已完成。 可以通过此方法注册多个关闭事件。
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
参数
_Event
Windows 事件对象的句柄,在计划程序关闭并自行销毁时,运行时将向其发出信号。
Release
递减计划程序的引用计数。
virtual unsigned int Release() = 0;
返回值
新递减的引用计数。
注解
这通常用于管理组合计划程序的生存期。 当计划程序的引用计数降为零时,计划程序将在其所有工作完成后关闭并析构自身。
ResetDefaultSchedulerPolicy
将默认计划程序策略重置为运行时默认值。 下次创建默认计划程序时,它将使用运行时默认策略设置。
static void __cdecl ResetDefaultSchedulerPolicy();
备注
当进程内存在默认计划程序时,可以调用此方法。 它不会影响现有默认计划程序的策略。 但是,如果默认计划程序要关闭,并且将在以后创建新的默认值,则新计划程序将使用运行时默认策略设置。
计划程序
Scheduler
类的对象只能使用工厂方法创建,也可以隐式创建。
Scheduler();
备注
当你使用许多运行时函数(需要将计划程序附加到调用上下文)时,会隐式创建进程的默认计划程序。 CurrentScheduler
类中的方法以及 PPL 和代理层的功能通常执行隐式附加。
还可以通过 CurrentScheduler::Create
方法或 Scheduler::Create
方法显式创建计划程序。
~Scheduler
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
指向要执行的函数的指针,用于执行轻量级任务的正文。
_Data
指向作为参数传递给任务正文的数据的 void 指针。
_Placement
对偏向执行轻量任务的位置的引用。
SetDefaultSchedulerPolicy
允许用户定义的策略用于创建默认计划程序。 仅当进程内不存在默认计划程序时,才能调用此方法。 设置默认策略后,它会一直有效,直到下一次有效调用 SetDefaultSchedulerPolicy
或 ResetDefaultSchedulerPolicy 方法。
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
参数
_Policy
要设置为默认计划程序策略的策略。
备注
如果在进程中已存在默认计划程序时调用 SetDefaultSchedulerPolicy
方法,则运行时将引发 default_scheduler_exists 异常。