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


Функции пространства имен concurrency

Следующие функции доступны в пространстве имен:

Alloc

Выделяет блок памяти указанного размера из субраспределителя кэширования Concurrency Runtime.

void* __cdecl Alloc(size_t _NumBytes);

Параметры

_NumBytes
Количество байтов памяти для выделения.

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

Указатель на только что выделенную память.

Замечания

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

asend

Асинхронная операция отправки, которая назначает задачу для передачи данных в целевой блок.

template <class T>
bool asend(
    _Inout_ ITarget<T>* _Trg,
    const T& _Data);

template <class T>
bool asend(
    ITarget<T>& _Trg,
    const T& _Data);

Параметры

T
Тип отправленных данных.

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

_Данные
Ссылка на данные, которые будут отправлены.

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

если сообщение было принято до возврата метода, в противном случае.

Замечания

Дополнительные сведения см. в разделе "Функции передачи сообщений".

отменить_текущую_задачу

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

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

inline __declspec(noreturn) void __cdecl cancel_current_task();

очистить

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

template<typename T, class _Ax>
void concurrent_queue<T, _Ax>::clear();

Параметры

T

_Ax

create_async

Создает асинхронную конструкцию среда выполнения Windows на основе предоставленного пользователем лямбда-объекта или объекта функции. Тип возвращаемого значения — один из следующих: , , или , в зависимости от сигнатуры лямбда-выражения, переданного методу.

template<typename _Function>
__declspec(noinline) auto create_async(const _Function& _Func)
    -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

Параметры

_Функция
Тип.

_Func
Лямбда-объект или объект функции, из которого создается асинхронная конструкция среда выполнения Windows.

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

Асинхронная конструкция, представленная интерфейсами IAsyncAction^, IAsyncActionWithProgressTProgress^, IAsyncOperationTResult^ или IAsyncOperationWithProgressTResult, TProgress^. Возвращаемый интерфейс зависит от сигнатуры лямбда-выражения, переданного в функцию.

Замечания

Тип возвращаемого значения лямбда-выражения определяет, будет ли конструкция действием или операцией.

Лямбда-выражения, возвращающие значение void, приводят к созданию действий. Лямбда-выражения, возвращающие результат типа , приводят к созданию операций TResult.

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

Лямбда-выражение может принимать ноль, один или два аргумента. Допустимые аргументы — и , в этом порядке, если используются оба. Лямбда-выражение без аргументов вызывает создание асинхронной конструкции без возможности отслеживания прогресса. Лямбда, которая принимает progress_reporterTProgress, приведет к возврату асинхронной конструкции, которая сообщает о прогрессе типа TProgress при каждом вызове метода объекта progress_reporter. Лямбда-выражение, которое принимает токен отмены, может использовать этот токен для проверки отмены или передать его задачам, которые оно создает, чтобы отмена асинхронной конструкции вызывала отмену этих задач.

Если тело лямбда-объекта или функции возвращает результат (а не задачуTResult), лямбда будет выполняться асинхронно в процессе MTA в контексте задачи, которую среда выполнения создает неявно. Метод вызовет отмену неявной задачи.

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

Эта функция доступна только для среда выполнения Windows приложений.

CreateResourceManager

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

IResourceManager* __cdecl CreateResourceManager();

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

Интерфейс .

Замечания

Несколько последующих вызовов этого метода возвращают один и тот же экземпляр Resource Manager. Каждый вызов метода увеличивает счетчик ссылок на Resource Manager и должен быть дополнен вызовом метода IResourceManager::Release после того, как планировщик завершит взаимодействие с Resource Manager.

unsupported_os возникает, если операционная система не поддерживается Concurrency Runtime.

создать_задачу

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

template<typename T>
__declspec(noinline) auto create_task(T _Param, const task_options& _TaskOptions = task_options())
    -> task<typename details::_TaskTypeFromParam<T>::T>;

template<typename _ReturnType>
__declspec( noinline) task<_ReturnType> create_task(const task<_ReturnType>& _Task);

Параметры

T
Тип параметра, из которого будет создаваться задача.

_ReturnType
Тип.

_Param
Параметр, из которого будет создаваться задача. Это может быть лямбда-объект или объект-функция, объект task_completion_event, другой объект task или интерфейс #REF!::Foundation::IAsyncInfo, если вы используете задачи в приложении UWP.

_TaskOptions
Параметры задачи.

_Задача
Задача, которую требуется создать.

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

Новая задача типа , которая выводится из .

Замечания

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

Вторая перегрузка связывает маркер отмены, предоставленный только что созданной задачей. Если вы используете эту перегрузку, вы не можете передать другой объект в качестве первого параметра.

Тип возвращаемой задачи выводится из первого параметра функции. Если является , или функцией, которая возвращает либо тип , либо , то тип созданной задачи — .

В приложении UWP, если _Param имеет тип #REF!::Foundation::IAsyncOperation<T>^ или #REF!::Foundation::IAsyncOperationWithProgress<T,P>^, или functor, возвращающий любой из этих типов, созданная задача будет иметь тип task<T>. Если _Param имеет тип #REF!::Foundation::IAsyncAction^ или #REF!::Foundation::IAsyncActionWithProgress<P>^, или functor, возвращающий любой из этих типов, созданная задача будет иметь тип task<void>.

Отключить трассировку

Отключает трассировку в среде Concurrency Runtime. Эта функция не рекомендуется использовать, поскольку ETW трассировка по умолчанию не зарегистрирована.

__declspec(deprecated("Concurrency::DisableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl DisableTracing();

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

Если трассировка была правильно отключена, возвращается. Если трассировка не была запущена ранее, возвращается

EnableTracing

Включает трассировку в среде выполнения с параллелизмом. Эта функция устарела, поскольку трассировка событий ETW теперь включена по умолчанию.

__declspec(deprecated("Concurrency::EnableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl EnableTracing();

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

Если трассировка была правильно запущена, вернётся ; в противном случае вернётся .

Бесплатно

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

void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void* _PAllocation);

Параметры

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

Замечания

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

получить_окружающий_планировщик

inline std::shared_ptr<::Concurrency::scheduler_interface> get_ambient_scheduler();

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

GetExecutionContextId

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

unsigned int __cdecl GetExecutionContextId();

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

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

Замечания

Используйте этот метод для получения идентификатора контекста выполнения перед передачей интерфейса IExecutionContext в качестве параметра любому из методов, предлагаемых Resource Manager.

GetOSVersion

Возвращает версию операционной системы.

IResourceManager::OSVersion __cdecl GetOSVersion();

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

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

Замечания

unsupported_os возникает, если операционная система не поддерживается Concurrency Runtime.

GetProcessorCount

Возвращает число аппаратных потоков базовой системы.

unsigned int __cdecl GetProcessorCount();

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

Количество аппаратных потоков.

Замечания

unsupported_os возникает, если операционная система не поддерживается Concurrency Runtime.

GetProcessorNodeCount

Возвращает число узлов NUMA или пакетов процессора в базовой системе.

unsigned int __cdecl GetProcessorNodeCount();

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

Количество узлов NUMA или пакетов процессора.

Замечания

Если система содержит больше узлов NUMA, чем пакеты процессора, возвращается число узлов NUMA, в противном случае возвращается количество пакетов процессора.

unsupported_os возникает, если операционная система не поддерживается Concurrency Runtime.

ПолучитьIDПланировщика

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

unsigned int __cdecl GetSchedulerId();

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

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

Замечания

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

внутренние_назначение_итераторов

template<typename T, class _Ax>
template<class _I>
void concurrent_vector<T, _Ax>::internal_assign_iterators(
   _I first,
   _I last);

Параметры

T

_Ax


первый

последний

точка прерывания

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

inline void interruption_point();

Замечания

Не следует перехватывать внутреннее исключение отмены, создаваемое функцией . Исключение будет перехвачено и обработано средой выполнения, и его перехват может вызвать непредсказуемое поведение программы.

является_отмена_текущей_группы_задач

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

bool __cdecl is_current_task_group_canceling();

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

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

Замечания

Дополнительные сведения см. в разделе "Отмена".

сделать_выбор

Конструирует блок сообщений из необязательного объекта или и двух или более источников входных данных.

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    Scheduler& _PScheduler,
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    ScheduleGroup& _PScheduleGroup,
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

Параметры

T1
Тип блока сообщений первого источника.

T2
Тип блока сообщений второго источника.

_PScheduler
Объект , в котором запланирована задача распространения для блока обмена сообщениями .

_Item1
Первый источник.

_Item2
Второй источник.

_Элементы
Дополнительные источники.

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

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

Блок сообщений с двумя или более источниками входных данных.

make_greedy_join

Конструирует блок сообщений из необязательного объекта или и двух или более источников входных данных.

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>,greedy> make_greedy_join(
    Scheduler& _PScheduler,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
    ScheduleGroup& _PScheduleGroup,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
    T1 _Item1,
    T2 _Items,
    Ts... _Items);

Параметры

T1
Тип блока сообщений первого источника.

T2
Тип блока сообщений второго источника.

_PScheduler
Объект , в котором запланирована задача распространения для блока обмена сообщениями .

_Item1
Первый источник.

_Item2
Второй источник.

_Элементы
Дополнительные источники.

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

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

Блок сообщений с двумя или более источниками входных данных.

make_join

Конструирует блок сообщений из необязательного объекта или и двух или более источников входных данных.

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>>
    make_join(
Scheduler& _PScheduler,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
ScheduleGroup& _PScheduleGroup,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

Параметры

T1
Тип блока сообщений первого источника.

T2
Тип блока сообщений второго источника.

_PScheduler
Объект , в котором запланирована задача распространения для блока обмена сообщениями .

_Item1
Первый источник.

_Item2
Второй источник.

_Элементы
Дополнительные источники.

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

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

Блок сообщений с двумя или более источниками входных данных.

создать_задачу

Фабричный метод для создания объекта .

template <class _Function>
task_handle<_Function> make_task(const _Function& _Func);

Параметры

_Функция
Тип объекта функции, который будет вызван для выполнения работы, представленной объектом.

_Func
Функция, которая будет вызвана для выполнения работы, представленной объектом. Это может быть лямбда-функтор, указатель на функцию или любой объект, поддерживающий версию оператора вызова функции с сигнатурой .

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

Объект .

Замечания

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

параллельная буферная сортировка

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

template<typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator,
    typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator,
    typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

Параметры

_Random_iterator
Тип итератора входного диапазона.

_Аллокатор
Тип аллокатора памяти, совместимого со стандартной библиотекой C++.

_Функция
Тип двоичного компратора.

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

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

_Alloc
Экземпляр аллокатора памяти, совместимого со стандартной библиотекой C++.

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

_Chunk_size
Минимальный размер блока, который будет разбит на два для параллельного выполнения.

Замечания

Для всех перегрузок требуется дополнительное пространство, где количество элементов для сортировки и тип элемента. В большинстве случаев parallel_buffered_sort будет наблюдаться улучшение производительности по сравнению с parallel_sort, и его следует предпочесть parallel_sort, если у вас имеется достаточно свободной памяти.

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

Если вы не предоставляете тип или экземпляр распределителя, для выделения буфера используется распределитель памяти стандартной библиотеки C++.

Алгоритм делит входной диапазон на два блока и последовательно делит каждый блок на два подблока для параллельного выполнения. Необязательный аргумент можно использовать для указания алгоритму, который должен обрабатывать блоки размера последовательно.

parallel_for

выполняет итерацию по диапазону индексов и выполняет предоставленную пользователем функцию в каждой итерации параллельно.

template <typename _Index_type, typename _Function, typename _Partitioner>
void parallel_for(
    _Index_type first,
    _Index_type last,
    _Index_type _Step,
    const _Function& _Func,
    _Partitioner&& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    _Index_type _Step,
    const _Function& _Func);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const auto_partitioner& _Part = auto_partitioner());

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const static_partitioner& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const simple_partitioner& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    affinity_partitioner& _Part);

Параметры

_Index_type
Тип индекса, используемого для итерации.

_Функция
Тип функции, которая будет выполняться при каждой итерации.

_Партиционер
Тип секционатора, который используется для секционирования заданного диапазона.

первый
Первый индекс, который необходимо включить в итерацию.

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

_Шаг
Значение, по которому выполняется шаг при итерации от. Шаг должен быть положительным. invalid_argument выбрасывается, если шаг меньше 1.

_Func
Функция, выполняемая при каждой итерации. Это может быть лямбда-выражение, указатель функции или любой объект, поддерживающий версию оператора вызова функции с подписью .

_Часть
Ссылка на объект-разделитель. Аргумент может быть одним из auto_partitioner, static_partitioner, simple_partitioner или affinity_partitioner Если используется объект affinity_partitioner, ссылка должна быть неконстантной l-value ссылкой, чтобы алгоритм мог сохранять состояние для повторного использования в будущих циклах.

Замечания

Дополнительные сведения см. в разделе "Параллельные алгоритмы".

parallel_for_each

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

template <typename _Iterator, typename _Function>
void parallel_for_each(
    _Iterator first,
    _Iterator last,
    const _Function& _Func);

template <typename _Iterator, typename _Function, typename _Partitioner>
void parallel_for_each(
    _Iterator first,
    _Iterator last,
    const _Function& _Func,
    _Partitioner&& _Part);

Параметры

_Итератор
Тип итератора, используемого для итерации по контейнеру.

_Функция
Тип функции, которая будет применена к каждому элементу в диапазоне.

_Партиционер
первый
Итератор, указывающий положение первого элемента, который будет включен в параллельную итерацию.

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

_Func
Определяемый пользователем объект функции, применяемый к каждому элементу в диапазоне.

_Часть
Ссылка на объект-разделитель. Аргумент может быть одним из auto_partitioner, static_partitioner, simple_partitioner или affinity_partitioner Если используется объект affinity_partitioner, ссылка должна быть неконстантной l-value ссылкой, чтобы алгоритм мог сохранять состояние для повторного использования в будущих циклах.

Замечания

auto_partitioner будет использоваться в случае перегрузки без явного разделителя.

Для итераторов, не поддерживающих случайный доступ, поддерживается только auto_partitioner .

Дополнительные сведения см. в разделе "Параллельные алгоритмы".

вызов_параллельно

Выполняет объекты функции, предоставленные в виде параметров, в параллельном режиме и блокирует их до завершения выполнения. Каждый объект функции может быть лямбда-выражением, указателем на функцию или любым объектом, который поддерживает оператор вызова функции с подписью .

template <typename _Function1, typename _Function2>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2);

template <typename _Function1, typename _Function2, typename _Function3>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8,
    typename _Function9>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8,
    const _Function9& _Func9);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8,
    typename _Function9,
    typename _Function10>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8,
    const _Function9& _Func9,
    const _Function10& _Func10);

Параметры

_Function1
Тип первого объекта функции, выполняемого параллельно.

_Function2
Тип второго объекта функции, выполняемого параллельно.

_Function3
Тип третьего объекта функции, выполняемого параллельно.

_Function4
Тип четвертого объекта функции, выполняемого параллельно.

_Function5
Тип пятого объекта функции, выполняемого параллельно.

_Function6
Тип шестого объекта функции, выполняемого параллельно.

_Function7
Тип седьмого объекта функции, выполняемого параллельно.

_Function8
Тип восьмого объекта функции, выполняемого параллельно.

_Function9
Тип девятого объекта функции, выполняемого параллельно.

_Function10
Тип десятого объекта функции, выполняемого параллельно.

_Func1
Первый объект функции, выполняемый параллельно.

_Func2
Второй объект функции, выполняемый параллельно.

_Func3
Третий объект функции, выполняемый параллельно.

_Func4
Четвертый объект функции, выполняемый параллельно.

_Func5
Пятый объект функции, выполняемый параллельно.

_Func6
Шестой объект функции, выполняемый параллельно.

_Func7
Седьмой объект функции, выполняемый параллельно.

_Func8
Восьмой объект функции, выполняемый параллельно.

_Func9
Девятый объект функции, выполняемый параллельно.

_Func10
Десятый объект функции, выполняемый параллельно.

Замечания

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

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

Дополнительные сведения см. в разделе "Параллельные алгоритмы".

parallel_radixsort

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

template<typename _Random_iterator>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator, typename _Function>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

template<typename _Allocator, typename _Random_iterator,
    typename _Function>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_radixsort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

Параметры

_Random_iterator
Тип итератора входного диапазона.

_Аллокатор
Тип аллокатора памяти, совместимого со стандартной библиотекой C++.

_Функция
Тип функции проекции.

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

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

_Alloc
Экземпляр аллокатора памяти, совместимого со стандартной библиотекой C++.

_Proj_func
Определяемый пользователем объект функции проекции, который преобразует элемент в целочисленное значение.

_Chunk_size
Минимальный размер блока, который будет разбит на два для параллельного выполнения.

Замечания

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

Если вы не предоставляете функцию проекции, функция проекции по умолчанию, которая просто возвращает элемент, используется для целочисленных типов. Функция не сможет компилироваться, если элемент не является целочисленным типом в отсутствие функции проекции.

Если вы не предоставляете тип или экземпляр распределителя, для выделения буфера используется распределитель памяти стандартной библиотеки C++.

Алгоритм делит входной диапазон на два блока и последовательно делит каждый блок на два подблока для параллельного выполнения. Необязательный аргумент можно использовать для указания алгоритму, который должен обрабатывать блоки размера последовательно.

параллельное сокращение

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

template<typename _Forward_iterator>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity);

template<typename _Forward_iterator, typename _Sym_reduce_fun>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity,
    _Sym_reduce_fun _Sym_fun);

template<typename _Reduce_type,
    typename _Forward_iterator,
    typename _Range_reduce_fun,
    typename _Sym_reduce_fun>
inline _Reduce_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const _Reduce_type& _Identity,
    const _Range_reduce_fun& _Range_fun,
    const _Sym_reduce_fun& _Sym_fun);

Параметры

_Forward_iterator
Тип итератора диапазона ввода.

_Sym_reduce_fun
Тип функции симметричной редукции. Это должен быть тип функции с сигнатурой , где _Reduce_type совпадает с типом идентификатора и типом результата редукции. В третьей перегрузке это должно быть совместимо с типом вывода .

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

_Range_reduce_fun
Тип функции редукции диапазона. Это должен быть тип функции с сигнатурой , _Reduce_type совпадает с типом идентификатора и типом результата редукции.

_Начинать
Итератор ввода, указывающий на первый элемент в диапазоне для редукции.

_Конец
Итератор ввода, указывающий на элемент, который находится на одну позицию за последним элементом в области, которая подлежит сокращению.

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

_Sym_fun
Симметричная функция, которая будет использоваться на второй стадии редукции. Дополнительные сведения см. в примечаниях.

_Range_fun
Функция, которая будет использоваться на первом этапе редукции. Дополнительные сведения см. в примечаниях.

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

Итог сокращения.

Замечания

Для выполнения параллельной редукции функция делит диапазон на блоки на основе количества работников, доступных базовому планировщику. Редукция происходит в две стадии, на первой стадии выполняется редукция в каждом блоке, на второй стадии выполняется редукция частичных результатов из каждого блока.

Первая перегрузка требует, чтобы типы итератора и были такими же, как и тип значения идентификатора и тип результата редукции. Тип элемента T должен предоставлять оператор , чтобы сократить элементы в каждом блоке. Тот же оператор используется на второй стадии.

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

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

параллельная сортировка

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

template<typename _Random_iterator>
inline void parallel_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator,typename _Function>
inline void parallel_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

Параметры

_Random_iterator
Тип итератора входного диапазона.

_Функция
Тип бинарного функтора сравнения.

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

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

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

_Chunk_size
Минимальный размер блока, который будет разделен на два для параллельного выполнения.

Замечания

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

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

Алгоритм делит входной диапазон на два блока и последовательно делит каждый блок на два подблока для параллельного выполнения. Необязательный аргумент можно использовать для указания алгоритму, который должен обрабатывать блоки размера последовательно.

параллельное преобразование

Применяет заданный объект функции к каждому элементу в исходном диапазоне или к паре элементов из двух исходных диапазонов и параллельно копирует возвращаемые значения объекта функции в диапазон назначения. Эта функция семантически эквивалентна .

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const auto_partitioner& _Part = auto_partitioner());

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const static_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const simple_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    affinity_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Input_iterator2,
    typename _Output_iterator,
    typename _Binary_operator,
    typename _Partitioner>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Input_iterator2
first2,
    _Output_iterator _Result,
    const _Binary_operator& _Binary_op,
    _Partitioner&& _Part);

template <typename _Input_iterator1,
    typename _Input_iterator2,
    typename _Output_iterator,
    typename _Binary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Input_iterator2
first2,
    _Output_iterator _Result,
    const _Binary_operator& _Binary_op);

Параметры

_Input_iterator1
Тип первого или единственного итератора ввода.

_Output_iterator
Тип выходного итератора.

_Унарный оператор
Тип унарного функтора, который должен выполняться для каждого элемента во входном диапазоне.

_Input_iterator2
Тип второго итератора ввода.

_Бинарный_оператор
Тип бинарного функтора, выполняемого попарно на элементах из двух исходных диапазонов.

_Партиционер
first1
Итератор ввода указывает на позицию первого элемента в первом или единственном исходном обрабатываемом диапазоне.

last1
Итератор ввода указывает на позицию, следующую за последним элементом в первом или единственном исходном обрабатываемом диапазоне.

_Результат
Итератор вывода указывает на позицию первого элемента в диапазоне назначения.

_Unary_op
Определенный пользователем объект унарной функции, который применяется к каждому элементу в исходном диапазоне.

_Часть
Ссылка на объект-разделитель. Аргумент может быть одним из auto_partitioner, static_partitioner, simple_partitioner или affinity_partitioner Если используется объект affinity_partitioner, ссылка должна быть неконстантной l-value ссылкой, чтобы алгоритм мог сохранять состояние для повторного использования в будущих циклах.

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

_Binary_op
Определяемый пользователем объект бинарной функции, который последовательно применяется к парам элементов из двух исходных диапазонов.

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

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

Замечания

auto_partitioner будет использоваться для перегрузок без явного аргумента распределителя.

Для итераторов, не поддерживающих случайный доступ, поддерживается только auto_partitioner .

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

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

Дополнительные сведения см. в разделе "Параллельные алгоритмы".

получение

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

template <class T>
T receive(
    _Inout_ ISource<T>* _Src,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    _Inout_ ISource<T>* _Src,
    typename ITarget<T>::filter_method const& _Filter_proc,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    ISource<T>& _Src,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    ISource<T>& _Src,
    typename ITarget<T>::filter_method const& _Filter_proc,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

Параметры

T
Тип полезной нагрузки.

_Src
Указатель или ссылка на источник, из которого ожидаются данные.

_Тайм-аут
Максимальное время в миллисекундах, в течение которого метод должен обрабатывать данные.

_Filter_proc
Функция фильтра, которая определяет, должны ли приниматься сообщения.

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

Значение из источника, типа полезной нагрузки.

Замечания

Если параметр имеет значение, отличное от константы , исключение operation_timed_out возникает, если указанное время истекает до получения сообщения. Если требуется время ожидания нулевой длины, следует использовать функцию try_receive вместо передачи в параметра времени ожидания (ноль), так как это более эффективно и не вызывает исключений в случае тайм-аута.

Дополнительные сведения см. в разделе "Функции передачи сообщений".

запуск_с_токеном_отмены

Немедленно и синхронно выполняет объект функции в контексте заданного токена отмены.

template<typename _Function>
void run_with_cancellation_token(
    const _Function& _Func,
    cancellation_token _Ct);

Параметры

_Функция
Тип объекта функции, который будет вызываться.

_Func
Объект функции, который будет выполняться. Этот объект должен поддерживать оператор вызова функции с сигнатурой void(void).

_Ct
Токен отмены, который будет управлять неявной отменой объекта функции. Используйте , если вы хотите, чтобы функция выполнялась без возможности неявной отмены из-за отмены родительской группы задач.

Замечания

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

отправить

Синхронная операция отправки, которая ожидает принятия или отклонения сообщения получателем.

template <class T>
bool send(_Inout_ ITarget<T>* _Trg, const T& _Data);

template <class T>
bool send(ITarget<T>& _Trg, const T& _Data);

Параметры

T
Тип полезной нагрузки.

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

_Данные
Ссылка на данные, которые будут отправлены.

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

Если сообщение было принято, в противном случае.

Замечания

Дополнительные сведения см. в разделе "Функции передачи сообщений".

установить_диспетчер_окружающей_среды

inline void set_ambient_scheduler(std::shared_ptr<::Concurrency::scheduler_interface> _Scheduler);

Параметры

_Планировщик
Планировщик окружения, который нужно задать.

настроить ресурсы выполнения задачи

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

Допустимо вызывать этот метод только до создания Resource Manager или между двумя периодами существования Resource Manager. Его можно вызывать несколько раз при условии, что Resource Manager не существует в момент вызова. После задания ограничения сходства оно остаётся в силе до следующего допустимого вызова метода .

Предоставленная маска привязки не должна обязательно быть подмножеством маски привязки процесса. Аффинность процессов будет обновлена при необходимости.

void __cdecl set_task_execution_resources(
    DWORD_PTR _ProcessAffinityMask);

void __cdecl set_task_execution_resources(
    unsigned short count,
    PGROUP_AFFINITY _PGroupAffinity);

Параметры

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

число
Количество записей в массиве, заданном параметром .

_PGroupAffinity
Массив записей .

Замечания

Метод выбрасывает исключение invalid_operation, если Resource Manager присутствует во время его вызова, и исключение invalid_argument, если указанная привязка приводит к пустому набору ресурсов.

Версия метода, которая принимает массив сопоставлений групп в качестве параметра, следует использовать только в операционных системах с версией #REF! или более поздней. В противном случае создается исключение invalid_operation.

Программное изменение привязки процесса после вызова этого метода не приведет к повторной оценке привязки, на которую ограничен Resource Manager. Таким образом, все изменения привязки процесса необходимо сделать до вызова этого метода.

замена

Обменивает элементы двух объектов .

template<typename T, class _Ax>
inline void swap(
    concurrent_vector<T, _Ax>& _A,
    concurrent_vector<T, _Ax>& _B);

Параметры

T
Тип данных элементов, хранящихся в параллельных векторах.

_Ax
Тип распределителя параллельных векторов.

_A
Параллельный вектор, элементы которого необходимо обмениваться с элементами параллельного вектора .

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

Замечания

Функция шаблона — это алгоритм, специализированный для класса контейнера для выполнения функции-члена . concurrent_vector::swap(). Это экземпляры частичного упорядочивания шаблонов функций компилятором. Когда функции-шаблоны перегружаются таким образом, что соответствие шаблона и вызова функции не является уникальным, компилятор выберет наиболее специализированную версию функции-шаблона. Общая версия функции шаблона, в классе алгоритма работает по назначению и является медленной операцией. Специализированная версия в каждом контейнере работает гораздо быстрее, так как она может работать с внутренним представлением класса контейнера.

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

задача_из_исключения

template<typename _TaskType, typename _ExType>
task<_TaskType> task_from_exception(
    _ExType _Exception,
    const task_options& _TaskOptions = task_options());

Параметры

_TaskType

_ExType

_Исключение

_TaskOptions

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

task_from_result

template<typename T>
task<T> task_from_result(
    T _Param,
    const task_options& _TaskOptions = task_options());

inline task<bool> task_from_result(ool _Param);

inline task<void> task_from_result(
    const task_options& _TaskOptions = task_options());

Параметры

T

_Param

_TaskOptions

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

Регистрация_агентов_отслеживания_имя

Связывает данное имя с блоком сообщений или агентом в трассировке событий Windows (ETW).

template <class T>
void Trace_agents_register_name(
    _Inout_ T* _PObject,
    _In_z_ const wchar_t* _Name);

Параметры

T
Тип объекта . Обычно это блок сообщений (message block) или агент.

_PObject
Указатель на блок сообщений или агент, который именован в трассировке.

_Имя
Имя для заданного объекта.

try_receive

Общая реализация проверки-получения, позволяющая контексту выполнять поиск данных строго из одного источника и фильтровать значения, которые принимаются. Если данные не готовы, метод вернет .

template <class T>
bool try_receive(_Inout_ ISource<T>* _Src, T& _value);

template <class T>
bool try_receive(
    _Inout_ ISource<T>* _Src,
    T& _value,
    typename ITarget<T>::filter_method const& _Filter_proc);

template <class T>
bool try_receive(ISource<T>& _Src, T& _value);

template <class T>
bool try_receive(
    ISource<T>& _Src,
    T& _value,
    typename ITarget<T>::filter_method const& _Filter_proc);

Параметры

T
Тип полезных данных

_Src
Указатель или ссылка на источник, из которого ожидаются данные.

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

_Filter_proc
Функция фильтра, которая определяет, должны ли приниматься сообщения.

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

Значение, указывающее, были ли полезные данные помещены в .

Замечания

Дополнительные сведения см. в разделе "Функции передачи сообщений".

подождите

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

void __cdecl wait(unsigned int _Milliseconds);

Параметры

_Миллисекунд
Число миллисекунд, на которое должен быть приостановлен текущий контекст. Если параметру задано значение , текущий контекст должен уступить выполнение другим работоспособным контекстам перед продолжением.

Замечания

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

when_all

Создает задачу, которая завершается успешно, если все задачи, предоставленные в качестве аргументов, завершаются успешно.

template <typename _Iterator>
auto when_all(
    _Iterator _Begin,
    _Iterator _End,
    const task_options& _TaskOptions = task_options()) ->
    decltype (details::_WhenAllImpl<typename std::iterator_traits<_Iterator>::value_type::result_type,
    _Iterator>::_Perform(_TaskOptions, _Begin,  _End));

Параметры

_Итератор
Тип итератора ввода.

_Начинать
Позиция первого элемента в диапазоне элементов, которые будут объединены в результирующую задачу.

_Конец
Позиция первого элемента за пределами диапазона элементов, которые будут объединены в результирующую задачу.

_TaskOptions
Объект .

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

Задача, которая успешно завершается, когда все входные задачи успешно завершены. Если входные задачи относятся к типу , выводом этой функции будет . Если входные задачи относятся к типу , выходная задача также будет .

Замечания

— это неблокирующая функция, которая создает как свой результат. В отличие от задачи::wait, вызов этой функции безопасен в приложении UWP на потоке ASTA (Application STA).

Если одна из задач отменена или бросает исключение, возвращаемая задача завершится досрочно, в отменённом состоянии, и это исключение, если оно произойдет, будет выброшено, если вы вызовете task::get или на этой задаче.

Дополнительные сведения см. в разделе "Параллелизм задач".

when_any

Создает задачу, которая завершается успешно, если любая из задач, предоставленных в качестве аргументов, завершается успешно.

template<typename _Iterator>
auto when_any(
    _Iterator _Begin,
    _Iterator _End,
    const task_options& _TaskOptions = task_options())
    -> decltype (
        details::_WhenAnyImpl<
            typename std::iterator_traits<_Iterator>::value_type::result_type,
            _Iterator>::_Perform(_TaskOptions, _Begin, _End));

template<typename _Iterator>
auto when_any(
    _Iterator _Begin,
    _Iterator _End,
    cancellation_token _CancellationToken)
       -> decltype (
           details::_WhenAnyImpl<
               typename std::iterator_traits<_Iterator>::value_type::result_type,
               _Iterator>::_Perform(_CancellationToken._GetImplValue(), _Begin, _End));

Параметры

_Итератор
Тип итератора ввода.

_Начинать
Позиция первого элемента в диапазоне элементов, которые будут объединены в результирующую задачу.

_Конец
Позиция первого элемента за пределами диапазона элементов, которые будут объединены в результирующую задачу.

_TaskOptions
_CancellationToken
Токен отмены, который контролирует отмену возвращаемой задачи. Если токен отмены не указан, результирующая задача получит токен отмены задачи, которая вызывает её завершение.

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

Задача, которая завершается успешно, если все входные задачи завершены успешно. Если входные задачи имеют тип , выходными данными этой функции будут , где первый элемент пары является результатом завершаемой задачи, а второй элемент — индексом завершенной задачи. Если входные задачи имеют тип , выходными данными будет , где результат — индекс завершаемой задачи.

Замечания

— это неблокирующая функция, которая создает как свой результат. В отличие от задачи::wait, вызов этой функции безопасен в приложении UWP на потоке ASTA (Application STA).

Дополнительные сведения см. в разделе "Параллелизм задач".

См. также

Пространство имен параллелизм