Поделиться через


Класс CurrentScheduler

Представляет абстракцию для текущего планировщика, связанного с вызывающим контекстом.

Синтаксис

class CurrentScheduler;

Участники

Открытые методы

Имя Описание
Создание Создает новый планировщик, поведение которого описано _Policy параметром и присоединяет его к вызывающему контексту. Созданный планировщик станет текущим планировщиком для контекста вызова.
CreateScheduleGroup Перегружен. Создает новую группу расписаний в планировщике, связанной с контекстом вызова. Версия, которая принимает параметр _Placement , приводит к тому, что задачи в созданной группе расписаний будут предвзяты в сторону выполнения в расположении, указанном этим параметром.
Отсоединить Отсоединяет текущий планировщик от контекста вызова и восстанавливает ранее присоединенный планировщик в качестве текущего планировщика, если он существует. После возвращения этого метода вызывающий контекст затем управляется планировщиком, который ранее был присоединен к контексту с помощью CurrentScheduler::Create метода или Scheduler::Attach метода.
Get Возвращает указатель на планировщик, связанный с контекстом вызова, также называемый текущим планировщиком.
GetNumberOfVirtualProcessors Возвращает текущее число виртуальных процессоров для планировщика, связанного с контекстом вызова.
GetPolicy Возвращает копию политики, с помощью которую был создан текущий планировщик.
Id Возвращает уникальный идентификатор для текущего планировщика.
IsAvailableLocation Определяет, доступно ли данное расположение в текущем планировщике.
RegisterShutdownEvent Вызывает передачу дескриптора событий Windows в _ShutdownEvent параметре, когда планировщик, связанный с текущим контекстом, завершает работу и уничтожает себя. В то время, когда событие сигнализирует, все работы, запланированные планировщику, завершены. С помощью этого метода можно зарегистрировать несколько событий завершения работы.
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 в группе расписаний. Планировщик уничтожит группу расписаний, когда все рабочие очереди в нее завершены.

Обратите внимание, что при явном создании этого планировщика необходимо освободить все ссылки на группы расписаний перед выпуском ссылки на планировщик, отсоединив текущий контекст от него.

Detach

Отсоединяет текущий планировщик от контекста вызова и восстанавливает ранее присоединенный планировщик в качестве текущего планировщика, если он существует. После возвращения этого метода вызывающий контекст затем управляется планировщиком, который ранее был присоединен к контексту с помощью CurrentScheduler::Create метода или Scheduler::Attach метода.

static void __cdecl Detach();

Замечания

Метод Detach неявно удаляет число ссылок из планировщика.

Если в контексте вызова нет планировщика, вызов этого метода приведет к возникновению исключения scheduler_not_attached .

Вызов этого метода из контекста, который является внутренним и управляемым планировщиком, или контекстом, присоединенным с помощью метода, отличного от метода Scheduler::Attach или CurrentScheduler::Create , приведет к возникновению исключения improper_scheduler_detach .

Получить

Возвращает указатель на планировщик, связанный с контекстом вызова, также называемый текущим планировщиком.

static Scheduler* __cdecl Get();

Возвращаемое значение

Указатель на планировщик, связанный с контекстом вызова (текущий планировщик).

Замечания

В результате этого метода в процессе будет создан планировщик по умолчанию и/или присоединен к вызывающему контексту, если отсутствует планировщик, в данный момент связанный с вызывающим контекстом. Дополнительная ссылка не помещается в объект, Scheduler возвращаемый этим методом.

GetNumberOfVirtualProcessors

Возвращает текущее число виртуальных процессоров для планировщика, связанного с контекстом вызова.

static unsigned int __cdecl GetNumberOfVirtualProcessors();

Возвращаемое значение

Если планировщик связан с контекстом вызова, текущее число виртуальных процессоров для этого планировщика; в противном случае — значение -1.

Замечания

Этот метод не приведет к вложению планировщика, если вызывающий контекст еще не связан с планировщиком.

Возвращаемое значение из этого метода является мгновенной выборкой количества виртуальных процессоров для планировщика, связанного с вызывающим контекстом. Это значение может быть устаревшим в момент возврата.

GetPolicy

Возвращает копию политики, с помощью которую был создан текущий планировщик.

static SchedulerPolicy __cdecl GetPolicy();

Возвращаемое значение

Копия политики, с помощью которую был создан текущий планировщик.

Замечания

В результате этого метода в процессе будет создан планировщик по умолчанию и/или присоединен к вызывающему контексту, если отсутствует планировщик, в данный момент связанный с вызывающим контекстом.

Артикул

Возвращает уникальный идентификатор для текущего планировщика.

static unsigned int __cdecl Id();

Возвращаемое значение

Если планировщик связан с контекстом вызова, уникальный идентификатор для этого планировщика; в противном случае — значение -1.

Замечания

Этот метод не приведет к вложению планировщика, если вызывающий контекст еще не связан с планировщиком.

IsAvailableLocation

Определяет, доступно ли данное расположение в текущем планировщике.

static bool __cdecl IsAvailableLocation(const location& _Placement);

Параметры

_Размещения
Ссылка на расположение, о котором необходимо отправить запрос текущему планировщику.

Возвращаемое значение

Индикация доступности расположения, указанного параметром _Placement, в текущем планировщике.

Замечания

Этот метод не приведет к вложению планировщика, если вызывающий контекст еще не связан с планировщиком.

Обратите внимание, что возвращаемое значение является результатом проверки доступности указанного расположения в данный момент. При наличии нескольких планировщиков динамическое управление ресурсами может добавлять или забирать ресурсы у планировщиков в любой момент. Если это произошло, доступность заданного расположения может измениться.

RegisterShutdownEvent

Вызывает передачу дескриптора событий Windows в _ShutdownEvent параметре, когда планировщик, связанный с текущим контекстом, завершает работу и уничтожает себя. В то время, когда событие сигнализирует, все работы, запланированные планировщику, завершены. С помощью этого метода можно зарегистрировать несколько событий завершения работы.

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 на данные, которые будут передаваться в качестве параметра в текст задачи.

_Размещения
Ссылка на расположение, где будет склонна выполняться упрощенная задача.

Замечания

В результате этого метода в процессе будет создан планировщик по умолчанию и/или присоединен к вызывающему контексту, если отсутствует планировщик, в данный момент связанный с вызывающим контекстом.

См. также

Пространство имен concurrency
Класс Scheduler
PolicyElementKey
Планировщик заданий