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


Класс promise

Описывает асинхронный поставщик.

Синтаксис

template <class Ty>
class promise;

Участники

Открытые конструкторы

Имя Описание
обещать Формирует объект promise.

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

Имя Описание
get_future Возвращает future, связанный с этим объектом promise.
set_exception Атомарно устанавливает результат этого объекта promise для обозначения исключения.
set_exception_at_thread_exit Атомарно устанавливает результат этого объекта promise для обозначения исключения и доставляет уведомление только после того, как все локальные объекты в текущем потоке уничтожены (обычно при выходе из потока).
set_value Атомарно устанавливает результат этого объекта promise для обозначения значения.
set_value_at_thread_exit Атомарно устанавливает результат этого объекта promise для обозначения значения и доставляет уведомление только после того, как все локальные объекты в текущем потоке уничтожены (обычно при выходе из потока).
swap Выполняет обмен связанного асинхронного состояния этого объекта promise с состоянием указанного объекта promise.

Открытые операторы

Имя Описание
promise::operator= Назначение общего состояния этого объекта promise.

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

обещать

Требования

Заголовок:<будущее>

Пространство имен: std

promise::get_future

Возвращает объект future, который имеет то же самое связанное асинхронное состояние, что и данный объект promise.

future<Ty> get_future();

Замечания

Если объект promise пустой, этот метод выдает future_error с error_codeno_state.

Если этот метод уже вызывался для объекта promise с тем же самым связанным асинхронным состоянием, метод выдает future_error с error_codefuture_already_retrieved.

promise::operator=

Передает связанное асинхронное состояние от указанного объекта promise.

promise& operator=(promise&& Other) noexcept;

Параметры

Другое
Объект promise.

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

*this

Замечания

Этот оператор передает связанное асинхронное состояние из Другого. После передачи другая пуста.

Конструктор promise::promise

Формирует объект promise.

promise();
template <class Alloc>
promise(allocator_arg_t, const Alloc& Al);
promise(promise&& Other) noexcept;

Параметры

Аль
Распределитель памяти. Дополнительные сведения об распределителях см. в разделе <"Распределители>".

Другое
Объект promise.

Замечания

Первый конструктор создает пустой promise объект.

Второй конструктор создает пустой promise объект и использует Al для выделения памяти.

Третий promise конструктор создает объект и передает связанное асинхронное состояние из Other и оставляет другим пустым.

promise::set_exception

Автоматически сохраняет исключение в качестве результата объекта promise и устанавливает связанное асинхронное состояние в значение ready.

void set_exception(exception_ptr Exc);

Параметры

Экск
Exception_ptr, который сохраняется этим методом как результат исключения.

Замечания

Если объект promise не имеет связанного асинхронного состояния, этот метод выдает future_error с кодом ошибки no_state.

Если set_exception, set_exception_at_thread_exit, set_value или set_value_at_thread_exit уже вызывались для объекта promise, который имеет то же самое связанное асинхронное состояние, то этот метод выдает future_error с кодом ошибки promise_already_satisfied.

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

promise::set_exception_at_thread_exit

Атомарно устанавливает результат promise для указания исключения, доставляя уведомление только после того, как все локальные объекты в текущем потоке уничтожены (обычно при завершении потока).

void set_exception_at_thread_exit(exception_ptr Exc);

Параметры

Экск
Exception_ptr, который сохраняется этим методом как результат исключения.

Замечания

Если объект promise не имеет связанного асинхронного состояния, этот метод выдает future_error с кодом ошибки no_state.

Если set_exception, set_exception_at_thread_exit, set_value или set_value_at_thread_exit уже вызывались для объекта promise, имеющего то же самое связанное асинхронное состояние, то этот метод выдает future_error с кодом ошибки promise_already_satisfied.

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

promise::set_value

Атомарно сохраняет значение в виде результата этого объекта promise и устанавливает связанное асинхронное состояние в значение ready.

void promise::set_value(const Ty& Val);
void promise::set_value(Ty&& Val);
void promise<Ty&>::set_value(Ty& Val);
void promise<void>::set_value();

Параметры

Валь
Значение, которое будет сохранено в качестве результата.

Замечания

Если объект promise не имеет связанного асинхронного состояния, этот метод выдает future_error с кодом ошибки no_state.

Если set_exception, set_exception_at_thread_exitset_value или set_value_at_thread_exit уже вызывались для объекта promise, имеющего то же самое связанное асинхронное состояние, то этот метод выдает future_error с кодом ошибки promise_already_satisfied.

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

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

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

Для частичной специализации promise<Ty&>хранимое значение фактически является ссылкой на Val.

Для специализации promise<void> сохраненные значения не существуют.

promise::set_value_at_thread_exit

Атомарно сохраняет значение в качестве результата этого объекта promise.

void promise::set_value_at_thread_exit(const Ty& Val);
void promise::set_value_at_thread_exit(Ty&& Val);
void promise<Ty&>::set_value_at_thread_exit(Ty& Val);
void promise<void>::set_value_at_thread_exit();

Параметры

Валь
Значение, которое будет сохранено в качестве результата.

Замечания

Если объект promise не имеет связанного асинхронного состояния, этот метод выдает future_error с кодом ошибки no_state.

Если set_exception, set_exception_at_thread_exit, set_value или set_value_at_thread_exit уже вызывались для объекта promise, имеющего то же самое связанное асинхронное состояние, этот метод выдает future_error с кодом ошибки promise_already_satisfied.

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

Первый метод также вызывает любое исключение, которое возникает при копировании Val в связанное асинхронное состояние.

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

Для частичной специализации promise<Ty&>хранимое значение фактически является ссылкой на Val.

Для специализации promise<void> сохраненные значения не существуют.

promise::swap

Обменивает связанное асинхронное состояние данного объекта promise с состоянием указанного объекта.

void swap(promise& Other) noexcept;

Параметры

Другое
Объект promise.

См. также

Справочник по файлам заголовков