std::promise<R>::set_value_at_thread_exit
void set_value_at_thread_exit( const R& value ); |
(1) | (член только для шаблона promise)(с C++11) |
void set_value_at_thread_exit( R&& value ); |
(2) | (член только для шаблона promise)(с C++11) |
void set_value_at_thread_exit( R& value ); |
(3) | (член только для специализации шаблона promise<R&>)(с C++11) |
void set_value_at_thread_exit() |
(4) | (член только для специализации шаблона promise<void>)(с C++11) |
Сохраняет value в общедоступном состоянии без немедленного подготовки состояния. Состояние готовится при выходе текущей нити, после того, как все переменные с локальным временем жизни нити были уничтожены.
Операция работает так, как если бы set_value, set_exception, set_value_at_thread_exit, и set_exception_at_thread_exit приобрели единственный мьютекс, связанный с объектом обещания, при обновлении объекта обещания.
Исключение выбрасывается, если нет общего состояния или общедоступное состояние уже содержит значение или исключение.
Вызовы этой функции не вводят гонки данных с вызовами get_future (поэтому они не должны синхронизироваться друг с другом).
Параметры
| value | - | значение для сохранения в общем состоянии |
Возвращаемое значение
(нет)
Исключения
std::future_error при следующих условиях:
*thisне имеет общего состояния. Код ошибки устанавливается вno_state.- Общее состояние уже содержит значение или исключение. Код ошибки устанавливается в
promise_already_satisfied.
Кроме того:
value.value.Пример
#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
См. также
| устанавливает результат в конкретное значение (общедоступный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/promise/set_value_at_thread_exit