public member function
<future>

std::promise::set_value_at_thread_exit

generic template (1)
void set_value_at_thread_exit (const T& val);void set_value_at_thread_exit (T&& val);
specializations (2)
void promise<R&>::set_value_at_thread_exit (R& val);     // when T is a reference type (R&)void promise<void>::set_value_at_thread_exit (void);     // when T is void
在线程退出时设置值
val 存储为共享状态的值,但不会立即使其变为就绪。相反,它将在线程退出时自动变为就绪,一旦所有具有线程存储期的对象都被销毁。

如果一个与同一共享状态关联的 future 对象正在等待 future::get 的调用,它将保持阻塞直到线程结束。一旦线程结束,它将解除阻塞并返回 val

请注意,调用此函数已将值设置到共享状态中,任何试图在此调用和线程结束之间修改该值的操作都将抛出 future_error,并将 promise_already_satisfied 作为错误条件

参数

val
共享状态的值。

返回值



数据竞争

promise 对象被修改。
共享状态被修改为原子操作(不会导致数据竞争),同步在线程结束时发生。

异常安全

基本保证:如果抛出异常,则 promise 对象处于有效状态。

此成员函数在以下条件下抛出异常
exception typeerror condition描述
future_errorfuture_errc::no_state该对象没有共享状态(它已被移动赋值
future_errorfuture_errc::promise_already_satisfied共享状态已存储值或异常
此成员函数还会抛出,如果用于复制/移动 val 的构造函数抛出(针对(1)),并且-取决于库的实现-也可能抛出以报告其他情况。

另见