std::promise<R>::set_value_at_thread_exit
| Основной шаблон | ||
void set_value_at_thread_exit( const R& value ); | (1) | (начиная с C++11) |
void set_value_at_thread_exit( R&& value ); | (2) | (начиная с C++11) |
| Специализации std::promise<R&> | ||
void set_value_at_thread_exit( R& value ); | (3) | (начиная с C++11) |
| Специализация std::promise<void> | ||
void set_value_at_thread_exit(); | (4) | (начиная с C++11) |
Сохраняет value в общее состояние, не делая это состояние готовым немедленно. Состояние становится готовым при завершении текущего потока после уничтожения всех переменных с длительностью хранения потока.
Операция выполняется так, как если бы set_value, set_exception, set_value_at_thread_exit и set_exception_at_thread_exit захватывали один мьютекс, связанный с объектом promise, во время его обновления.
Вызовы этой функции не создают гонок данных с вызовами get_future (поэтому им не требуется синхронизироваться друг с другом).
Параметры
| value | - | значение для сохранения в общем состоянии |
Возвращаемое значение
(нет)
Исключения
std::future_error в следующих случаях:
-
*thisне имеет общего состояния. Код ошибки устанавливается в значениеno_state. - В общем состоянии уже сохранено значение или исключение. Код ошибки устанавливается в значение
promise_already_satisfied.
Кроме того:
R.R.Пример
#include <future>
#include <iostream>
#include <thread>
int main()
{
using namespace std::chrono_literals;
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread([&p]
{
std::this_thread::sleep_for(1s);
p.set_value_at_thread_exit(9);
}).detach();
std::cout << "Waiting... " << std::flush;
f.wait();
std::cout << "Done!\nResult is: " << f.get() << '\n';
}
Вывод:
Waiting... Done! Result is: 9
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроспективно применены к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Поведение согласно опубликованной версии | Правильное поведение |
|---|---|---|---|
| LWG 2098 | C++11 | не было ясно, какие исключения должны выбрасываться | уточнено |
См. также
| устанавливает результат в заданное значение (открытая функция-член) |
|
| устанавливает результат, указывающий на исключение, но доставляет уведомление только при завершении потока (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/promise/set_value_at_thread_exit