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


Класс Scheduler

Представляет абстракцию для планировщика Concurrency Runtime.

Синтаксис

class Scheduler;

Участники

Защищенные конструкторы

Имя Описание
Планировщик Объект Scheduler класса может создаваться только с помощью методов фабрики или неявно.
~Деструктор планировщика Объект Scheduler класса неявно уничтожается, когда все внешние ссылки на него перестают существовать.

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

Имя Описание
Присоединить Присоединяет планировщик к контексту вызова. После возвращения этого метода вызывающий контекст управляется планировщиком задач, а планировщик задач становится текущим планировщиком.
Создать Создает новый планировщик, поведение которого описано _Policy параметром, помещает начальную ссылку на планировщик и возвращает указатель на него.
CreateScheduleGroup Перегружен. Создает новую группу расписаний в планировщике. Версия, которая принимает параметр _Placement , приводит к тому, что задачи в созданной группе расписаний будут предвзяты в сторону выполнения в расположении, указанном этим параметром.
GetNumberOfVirtualProcessors Возвращает текущее количество виртуальных процессоров для планировщика.
GetPolicy Возвращает копию политики, с помощью которой был создан планировщик.
Id Возвращает уникальный идентификатор планировщика.
IsAvailableLocation Определяет, доступно ли данное расположение на планировщике.
Справочные материалы Увеличивает число ссылок планировщика.
RegisterShutdownEvent Вызывает сигнализацию переданного в _Event параметре дескриптора событий Windows при завершении работы планировщика и его уничтожении. Когда событие инициируется, все работы, переданные планировщиком, завершены. С помощью этого метода можно зарегистрировать несколько событий завершения работы.
Выпуск Уменьшает значение счетчика ссылок планировщика.
СбросПолитикиПланировщикаПоУмолчанию Сбрасывает политику планировщика по умолчанию в среду выполнения по умолчанию. При следующем создании планировщика по умолчанию он будет использовать параметры политики по умолчанию во время выполнения.
ScheduleTask Перегружен. Планирует облегченную задачу в планировщике. Упрощенная задача будет размещена в группе расписаний, определенной средой выполнения. Версия, принимающая параметр _Placement, смещает выполнение задачи в пользу указанного местоположения.
SetDefaultSchedulerPolicy Позволяет использовать определяемую пользователем политику для создания планировщика по умолчанию. Этот метод можно вызывать только в том случае, если планировщик по умолчанию не существует в процессе. После установки политики по умолчанию он остается в силе до следующего допустимого вызова SetDefaultSchedulerPolicyметода ResetDefaultSchedulerPolicy .

Замечания

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

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

Иерархия наследования

Scheduler

Требования

Заголовок: concrt.h

Пространство имен: конкурентность

Прикрепить

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

virtual void Attach() = 0;

Замечания

Присоединение планировщика неявно помещает ссылку на планировщик.

В какой-то момент в будущем необходимо вызвать метод CurrentScheduler::Detach, чтобы планировщик смог завершить работу.

Если этот метод вызывается из контекста, который уже подключен к другому планировщику, существующий планировщик запоминается как предыдущий планировщик, а созданный планировщик становится текущим планировщиком. При вызове 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.

СоздатьГруппуРасписания

Создает новую группу расписаний в планировщике. Версия, которая принимает параметр _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;

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

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

Артикул

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

virtual unsigned int Id() const = 0;

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

Уникальный идентификатор планировщика.

IsAvailableLocation

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

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

Параметры

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

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

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

Замечания

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

Справочные материалы

Увеличивает число ссылок планировщика.

virtual unsigned int Reference() = 0 ;

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

Новый увеличенный счетчик ссылок.

Замечания

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

Метод выбросит исключение improper_scheduler_reference, если число ссылок до вызова Reference метода было равно нулю и вызов совершён из контекста, который не принадлежит планировщику.

RegisterShutdownEvent (Регистрация события завершения работы)

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

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Параметры

_Событие
Дескриптор объекта события Windows, который будет сигнализироваться средой выполнения при завершении работы планировщика и его уничтожении.

Релиз

Уменьшает значение счетчика ссылок планировщика.

virtual unsigned int Release() = 0;

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

Счетчик ссылок после уменьшения.

Замечания

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

СбросПолитикиПланировщикаПоУмолчанию

Сбрасывает политику планировщика по умолчанию в среду выполнения по умолчанию. При следующем создании планировщика по умолчанию он будет использовать параметры политики по умолчанию во время выполнения.

static void __cdecl ResetDefaultSchedulerPolicy();

Замечания

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

Планировщик

Объект Scheduler класса может создаваться только с помощью методов фабрики или неявно.

Scheduler();

Замечания

Планировщик по умолчанию процесса создается неявно при использовании многих функций среды выполнения, требующих подключения планировщика к контексту вызова. Методы в классе CurrentScheduler и функции уровней PPL и агентов обычно выполняют неявное присоединение.

Вы также можете явно создать планировщик с помощью CurrentScheduler::Create метода или Scheduler::Create метода.

~Планировщик

Объект Scheduler класса неявно уничтожается, когда все внешние ссылки на него перестают существовать.

virtual ~Scheduler();

Запланированная задача

Планирует облегченную задачу в планировщике. Упрощенная задача будет размещена в группе расписаний, определенной средой выполнения. Версия, принимающая параметр _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.

См. также

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