Класс 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_code
future_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
.