CurrentScheduler 类
表示与调用上下文关联的当前计划程序的抽象。
语法
class CurrentScheduler;
成员
公共方法
名称 | 描述 |
---|---|
创建 | 创建一个新的计划程序,其行为由 _Policy 参数描述,并将其附加到调用上下文。 新创建的计划程序将成为调用上下文的当前计划程序。 |
CreateScheduleGroup | 已重载。 在与调用上下文关联的计划程序内创建新的计划组。 采用参数 _Placement 的版本会导致新创建的计划组中的任务偏向在该参数指定的位置执行。 |
分离 | 将当前计划程序从调用上下文中分离,并将以前附加的计划程序还原为当前计划程序(如果存在)。 此方法返回后,调用上下文由以前使用 CurrentScheduler::Create 或 Scheduler::Attach 方法附加到上下文的计划程序进行管理。 |
Get | 返回指向与调用上下文关联的计划程序(也称为当前计划程序)的指针。 |
GetNumberOfVirtualProcessors | 返回与调用上下文关联的计划程序的当前虚拟处理器数量。 |
GetPolicy | 返回创建当前计划程序的策略的副本。 |
Id | 返回当前计划程序的唯一标识符。 |
IsAvailableLocation | 确定在当前计划程序中给定位置是否可用。 |
RegisterShutdownEvent | 导致在与当前上下文关联的计划程序关闭并自行销毁时,向 _ShutdownEvent 参数中传递的 Windows 事件句柄收到信号。 在事件收到信号时,已计划到计划程序的所有工作都已完成。 可以通过此方法注册多个关闭事件。 |
ScheduleTask | 已重载。 在与调用上下文关联的计划程序内计划轻量级任务。 轻量任务将放置在运行时确定的计划组中。 采用参数 _Placement 的版本导致任务偏向在指定的位置执行。 |
备注
如果没有与调用上下文关联的计划程序(请参阅计划程序),则 CurrentScheduler
类中的许多方法将导致附加进程的默认计划程序。 这也可能意味着进程的默认计划程序是在此类调用期间创建的。
继承层次结构
CurrentScheduler
要求
标头:concrt.h
命名空间: 并发
创建
创建一个新的计划程序,其行为由 _Policy
参数描述,并将其附加到调用上下文。 新创建的计划程序将成为调用上下文的当前计划程序。
static void __cdecl Create(const SchedulerPolicy& _Policy);
参数
_Policy
描述新创建的计划程序行为的计划程序策略。
备注
将计划程序附加到调用上下文会在计划程序上隐式放置一个引用计数。
使用 Create
方法创建计划程序后,必须在将来的某个时间点调用 CurrentScheduler::Detach 方法,以便让计划程序关闭。
如果从已附加到其他计划程序的上下文调用此方法,则会将现有计划程序记住为以前的计划程序,而新创建的计划程序将成为当前计划程序。 在以后调用 CurrentScheduler::Detach
方法时,以前的计划程序将还原为当前计划程序。
此方法可能引发多种异常,包括 scheduler_resource_allocation_error 和 invalid_scheduler_policy_value。
CreateScheduleGroup
在与调用上下文关联的计划程序内创建新的计划组。 采用参数 _Placement
的版本会导致新创建的计划组中的任务偏向在该参数指定的位置执行。
static ScheduleGroup* __cdecl CreateScheduleGroup();
static ScheduleGroup* __cdecl CreateScheduleGroup(location& _Placement);
参数
_Placement
对偏向执行计划组内任务的位置的引用。
返回值
指向新创建的计划组的指针。 此 ScheduleGroup
对象上放置了一个初始引用计数。
备注
如果当前没有计划程序与调用上下文关联,此方法将导致进程的默认计划程序正被创建和/或附加到调用上下文。
完成计划工作后,必须在计划组上调用 Release 方法。 当排到计划组的所有工作都完成时,计划程序将销毁计划组。
请注意,如果显式创建了此计划程序,则必须释放对其中计划组的所有引用,然后才能在计划程序上释放引用,方法是将当前上下文与计划程序分离。
Detach
将当前计划程序从调用上下文中分离,并将以前附加的计划程序还原为当前计划程序(如果存在)。 此方法返回后,调用上下文由以前使用 CurrentScheduler::Create
或 Scheduler::Attach
方法附加到上下文的计划程序进行管理。
static void __cdecl Detach();
注解
Detach
方法从计划程序中隐式删除引用计数。
如果没有附加到调用上下文的计划程序,则调用此方法将导致引发 scheduler_not_attached 异常。
从计划程序内部和由计划程序管理的上下文或使用除 Scheduler::Attach 或 CurrentScheduler::Create 方法之外的方法附加的上下文调用此方法将导致引发 improper_scheduler_detach 异常。
Get
返回指向与调用上下文关联的计划程序(也称为当前计划程序)的指针。
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
对在当前计划程序中查询的位置的引用。
返回值
有关 _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
指向要执行的函数的指针,用于执行轻量级任务的正文。
_Data
指向作为参数传递给任务正文的数据的 void 指针。
_Placement
对偏向执行轻量任务的位置的引用。
注解
如果当前没有计划程序与调用上下文关联,此方法将导致进程的默认计划程序正被创建和/或附加到调用上下文。