std::promise<R>:: set_value_at_thread_exit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Setting the result | ||||
|
promise::set_value_at_thread_exit
|
||||
| Non-member Functions | ||||
| Helper Classes | ||||
|
Основной шаблон
|
||
|
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, при обновлении объекта 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++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2098 | C++11 | было неясно, какие исключения требуется выбрасывать | прояснено |
Смотрите также
|
устанавливает результат в определённое значение
(публичная функция-член) |
|
|
устанавливает результат для указания исключения с доставкой уведомления только при завершении потока
(публичная функция-член) |