void promise::set_value_at_thread_exit();
void promise::set_value_at_thread_exit(R& r);
void promise::set_value_at_thread_exit(R const& r);
void promise::set_value_at_thread_exit(R&& r);
Предусловия
С *this
ассоциирован асинхронный результат.
Результат
Сохраняет r
в асинхронном результате, ассоциированном с *this
, если ResultType
— не void
. Помечает, что в асинхронном результате хранится значение. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.
Постусловия
Асинхронный результат, ассоциированный с *this
, содержит значение, но не является готовым до завершения текущего потока. Все потоки, ожидающие асинхронного результата, будут разблокированы, когда текущий поток завершится.
Исключения
Исключение типа std::future_error
с кодом ошибки std::future_errc::promise_already_satisfied
, если в асинхронном результате уже находится значение или исключение. Любое исключение, возбужденное копирующим или перемещающим конструктором r
.
Синхронизация
Обращения к set_value()
, set_value_at_thread_exit()
, set_exception()
и set_exception_at_thread_exit()
сериализуются. Успешное обращение к set_value()
происходит-раньше обращения к функции std::future::get()
или std::shared_future::get()
, которая извлекает сохраненное значение.
STD::PROMISE::SET_EXCEPTION
, ФУНКЦИЯ-ЧЛЕН КЛАССА
Сохраняет исключение в асинхронном результате, ассоциированном с *this
.
Объявление
void set_exception(std::exception_ptr e);
Предусловия
С *this
ассоциирован асинхронный результат. (bool)e
равно true
.
Результат
Сохраняет e
в асинхронном результате, ассоциированном с *this
.
Постусловия
Асинхронный результат, ассоциированный с *this
, готов и содержит исключение. Все потоки, ожидающие асинхронного результата, разблокируются.
Исключения
Исключение типа std::future_error
с кодом ошибки std::future_errc::promise_already_satisfied
, если в асинхронном результате уже находится значение или исключение.
Синхронизация
Обращения к set_value()
, set_value_at_thread_exit()
, set_exception()
и set_exception_at_thread_exit()
сериализуются. Успешное обращение к set_value()
происходит-раньше обращения к функции std::future::get()
или std::shared_future::get()
, которая извлекает сохраненное исключение.
STD::PROMISE::SET_EXCEPTION_AT_THREAD_EXIT,
ФУНКЦИЯ-ЧЛЕН
Сохраняет исключение в асинхронном результате, ассоциированном с *this
, но не делает этот результат готовым раньше момента завершения потока.
Объявление
void set_exception_at_thread_exit(std::exception_ptr e);
Предусловия
С *this
ассоциирован асинхронный результат, (bool)e
равно true
.
Результат
Сохраняет e
в асинхронном результате, ассоциированном с *this
. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.
Постусловия
Асинхронный результат, ассоциированный с *this
, содержит исключение, но не является готовым до завершения текущего потока. Все потоки, ожидающие асинхронного результата, будут разблокированы, когда текущий поток завершится. Исключения
Исключение типа std::future_error
с кодом ошибки std::future_errc::promise_already_satisfied
, если в асинхронном результате уже находится значение или исключение.
Синхронизация
Обращения к set_value()
, set_value_at_thread_exit()
, set_exception()
и set_exception_at_thread_exit()
сериализуются. Успешное обращение к set_value()
происходит-раньше обращения к функции std::future::get()
или std::shared_future::get()
, которая извлекает сохраненное исключение.
D.4.5. Шаблон функции std::async
Шаблон функции std::async
дает простой способ выполнить автономную асинхронную задачу с использованием доступного аппаратного параллелизма. Обращение к std::async
возвращает объект std::future
, который содержит результат задачи. В зависимости от политики запуска задача выполняется либо асинхронно в отдельном потоке, либо синхронно в том потоке, который вызвал функции-члены wait()
или get()
объекта std::future
.
Объявление
enum class launch {
async, deferred
};
template
future::type>
async(Callable&& func, Args&& ... args);
template
future::type>
async(launch policy, Callable&& func, Args&& ... args);
Предусловия
Выражение INVOKE(func, args)
допустимо для переданных значений func
и args
. Тип Callable
и все члены Args
удовлетворяют требованиям концепции MoveConstructible
.
Читать дальше