Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Класс structured_task_group представляет коллекцию параллельной работы со сложной структурой. Можно поместить в очередь structured_task_group отдельные параллельные задачи с помощью объектов task_handle и ожидать их выполнения или отменить группу задач до завершения выполнения, что приведет к отмене всех задач, которые не начали выполнение.
Синтаксис
class structured_task_group;
Участники
Открытые конструкторы
| Имя | Описание |
|---|---|
| structured_task_group | Перегружен. Создает новый объект structured_task_group. |
| Деструктор ~structured_task_group | Уничтожает объект structured_task_group . Ожидается, что перед выполнением деструктора вызовет либо wait run_and_wait метод или метод, если деструктор не выполняется в результате очистки стека из-за исключения. |
Открытые методы
| Имя | Описание |
|---|---|
| cancel | Делает лучшие усилия, чтобы отменить вложенный дерево работы, корневой в этой группе задач. Каждая задача, запланированная в группе задач, будет отменена транзитивно, если это возможно. |
| is_canceling | Сообщает вызывающему объекту о том, находится ли группа задач в настоящее время в разгар отмены. Это не обязательно означает, что cancel метод был вызван для structured_task_group объекта (хотя такой, безусловно, квалифифизирует этот метод для возврата true). Это может быть случай, когда structured_task_group объект выполняется встроенным образом, и группа задач, дальнейшая работа в дереве работы была отменена. В таких случаях, когда среда выполнения может заранее определить, что отмена будет проходить через этот structured_task_group объект, true также будет возвращена. |
| run | Перегружен. Планирует задачу в объекте structured_task_group . Вызывающий объект управляет временем существования объекта, task_handle переданного _Task_handle в параметре. Версия, которая принимает параметр _Placement, заставляет задачу стремиться к выполнению в расположении, указанном этим параметром. |
| run_and_wait | Перегружен. Планирует выполнение задачи в встроенном контексте вызова с помощью объекта для полной structured_task_group поддержки отмены. task_handle Если объект передается в качестве параметраrun_and_wait, вызывающий объект отвечает за управление временем существования task_handle объекта. Затем функция ожидает завершения или отмены всех работ над structured_task_group объектом. |
| ждать | Ожидает завершения работы structured_task_group или отмены работы. |
Замечания
Существует ряд серьезных ограничений structured_task_group на использование объекта для повышения производительности:
Один
structured_task_groupобъект не может использоваться несколькими потоками. Все операции сstructured_task_groupобъектом должны выполняться потоком, создающим объект. Двумя исключениями этого правила являются функции-членыcancelиis_canceling. Объект может не находиться в списке захвата лямбда-выражения и использоваться в задаче, если задача не использует одну из операций отмены.Все задачи, запланированные для
structured_task_groupобъекта, планируются с помощьюtask_handleобъектов, которые необходимо явно управлять временем существования.Несколько групп могут использоваться только в абсолютно вложенном порядке. Если объявляются два
structured_task_groupобъекта, второй объявленный (внутренний) должен быть деструктор перед любым методом, кромеcancelтого, илиis_cancelingвызывается на первом (внешнем). Это условие имеет значение true как в случае простого объявления несколькихstructured_task_groupобъектов в одной или функционально вложенных областях, так и в случае задачи, которая была помещена вstructured_task_groupочередь черезrunметоды илиrun_and_waitметоды.В отличие от общего
task_groupкласса, все состояния вstructured_task_groupклассе являются окончательными. После помещения задач в очередь группы и ожидания их завершения невозможно использовать ту же группу снова.
Дополнительные сведения см. в разделе "Параллелизм задач".
Иерархия наследования
structured_task_group
Требования
Заголовок: ppl.h
Пространство имен: concurrency
Отмена
Делает лучшие усилия, чтобы отменить вложенный дерево работы, корневой в этой группе задач. Каждая задача, запланированная в группе задач, будет отменена транзитивно, если это возможно.
void cancel();
Замечания
Дополнительные сведения см. в разделе "Отмена".
is_canceling
Сообщает вызывающему объекту о том, находится ли группа задач в настоящее время в разгар отмены. Это не обязательно означает, что cancel метод был вызван для structured_task_group объекта (хотя такой, безусловно, квалифифизирует этот метод для возврата true). Это может быть случай, когда structured_task_group объект выполняется встроенным образом, и группа задач, дальнейшая работа в дереве работы была отменена. В таких случаях, когда среда выполнения может заранее определить, что отмена будет проходить через этот structured_task_group объект, true также будет возвращена.
bool is_canceling();
Возвращаемое значение
Указание того, находится ли structured_task_group объект в разгар отмены (или гарантированно будет в ближайшее время).
Замечания
Дополнительные сведения см. в разделе "Отмена".
run
Планирует задачу в объекте structured_task_group . Вызывающий объект управляет временем существования объекта, task_handle переданного _Task_handle в параметре. Версия, которая принимает параметр _Placement, заставляет задачу стремиться к выполнению в расположении, указанном этим параметром.
template<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _Function>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement);
Параметры
_Функция
Тип объекта функции, который будет вызываться для выполнения текста дескриптора задачи.
_Task_handle
Дескриптор запланированной работы. Обратите внимание, что вызывающий объект несет ответственность за время существования этого объекта. Среда выполнения будет продолжать ожидать, что она будет жить до wait run_and_wait вызова метода или объекта structured_task_group .
_Размещение
Ссылка на расположение, в котором должна выполняться задача, представленная параметром _Task_handle.
Замечания
Среда выполнения создает копию рабочей функции, передаваемой этому методу. Любые изменения состояния, происходящие в объекте функции, передаваемом этому методу, не будут отображаться в копии этого объекта функции.
structured_task_group Если деструкция в результате очистки стека от исключения не требуется гарантировать, что вызов был выполнен в любой wait из методов.run_and_wait В этом случае деструктор будет соответствующим образом отменять и ожидать завершения задачи, представленной параметром _Task_handle .
Вызывает исключение invalid_multiple_scheduling, если дескриптор задачи, предоставленный _Task_handle параметром, уже был запланирован на объект группы задач с помощью run метода, и не было интервенного вызова wait run_and_wait либо метода в этой группе задач.
run_and_wait
Планирует выполнение задачи в встроенном контексте вызова с помощью объекта для полной structured_task_group поддержки отмены. task_handle Если объект передается в качестве параметраrun_and_wait, вызывающий объект отвечает за управление временем существования task_handle объекта. Затем функция ожидает завершения или отмены всех работ над structured_task_group объектом.
template<class _Function>
task_group_status run_and_wait(task_handle<_Function>& _Task_handle);
template<class _Function>
task_group_status run_and_wait(const _Function& _Func);
Параметры
_Функция
Тип объекта функции, который будет вызываться для выполнения задачи.
_Task_handle
Дескриптор задачи, которая будет выполняться в контексте вызова. Обратите внимание, что вызывающий объект несет ответственность за время существования этого объекта. Среда выполнения будет продолжать ожидать, что она будет жить, пока метод не run_and_wait завершит выполнение.
_Func
Функция, которая будет вызываться для вызова текста работы. Это может быть лямбда-объект или другой объект, поддерживающий версию оператора вызова функции с подписью void operator()().
Возвращаемое значение
Указание того, была ли выполнена ожидание или группа задач была отменена, из-за явной операции отмены или исключения, вызываемого из одной из своих задач. Дополнительные сведения см. в task_group_status
Замечания
Обратите внимание, что одна или несколько задач, запланированных для этого structured_task_group объекта, могут выполняться встроенным образом в контексте вызова.
Если одна или несколько задач, запланированных для этого structured_task_group объекта, создает исключение, среда выполнения выберет одно из таких исключений выбора и распространяет его из вызова run_and_wait метода.
После возврата этой функции объект structured_task_group находится в конечном состоянии и не должен использоваться. Обратите внимание, что использование после возврата метода приведет к неопределенному run_and_wait поведению.
В неисключающем пути выполнения у вас есть мандат на вызов этого метода или wait метода перед деструктором structured_task_group выполнения.
structured_task_group
Создает новый объект structured_task_group.
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
Параметры
_CancellationToken
Маркер отмены, связанный с этой структурированной группой задач. Структурированная группа задач будет отменена при отмене маркера.
Замечания
Конструктор, который принимает токен отмены, создает structured_task_group, которая будет отменена, когда будет отменен источник, связанный с этим токеном. Предоставление явного маркера отмены также изолирует эту структурированную группу задач от участия в неявной отмене из родительской группы с другим маркером или без маркера.
~structured_task_group
Уничтожает объект structured_task_group . Ожидается, что перед выполнением деструктора вызовет либо wait run_and_wait метод или метод, если деструктор не выполняется в результате очистки стека из-за исключения.
~structured_task_group();
Замечания
Если деструктор выполняется в результате нормального выполнения (например, не очистка стека из-за исключения), а ни wait run_and_wait методы не были вызваны, деструктор может вызвать исключение missing_wait .
wait
Ожидает завершения работы structured_task_group или отмены работы.
task_group_status wait();
Возвращаемое значение
Указание того, была ли выполнена ожидание или группа задач была отменена, из-за явной операции отмены или исключения, вызываемого из одной из своих задач. Дополнительные сведения см. в task_group_status
Замечания
Обратите внимание, что одна или несколько задач, запланированных для этого structured_task_group объекта, могут выполняться встроенным образом в контексте вызова.
Если одна или несколько задач, запланированных для этого structured_task_group объекта, создает исключение, среда выполнения выберет одно из таких исключений выбора и распространяет его из вызова wait метода.
После возврата этой функции объект structured_task_group находится в конечном состоянии и не должен использоваться. Обратите внимание, что использование после возврата метода приведет к неопределенному wait поведению.
В неисключающем пути выполнения у вас есть мандат на вызов этого метода или run_and_wait метода перед деструктором structured_task_group выполнения.
См. также
Пространство имен concurrency
Класс task_group
Класс task_handle