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 | ||||
|
Modèle principal
|
||
|
void
set_value_at_thread_exit
(
const
R
&
value
)
;
|
(1) | (depuis C++11) |
|
void
set_value_at_thread_exit
(
R
&&
value
)
;
|
(2) | (depuis C++11) |
|
std::
promise
<
R
&
>
spécialisations
|
||
|
void
set_value_at_thread_exit
(
R
&
value
)
;
|
(3) | (depuis C++11) |
|
std::
promise
<
void
>
spécialisation
|
||
|
void
set_value_at_thread_exit
(
)
;
|
(4) | (depuis C++11) |
Stocke la value dans l'état partagé sans rendre l'état immédiatement prêt. L'état est rendu prêt lorsque le thread actuel se termine, après que toutes les variables avec une durée de stockage locale au thread aient été détruites.
L'opération se comporte comme si
set_value
,
set_exception
,
set_value_at_thread_exit
, et
set_exception_at_thread_exit
acquéraient un mutex unique associé à l'objet promise lors de la mise à jour de l'objet promise.
Les appels à cette fonction n'introduisent pas de courses de données avec les appels à get_future (par conséquent, ils n'ont pas besoin de se synchroniser entre eux).
Table des matières |
Paramètres
| value | - | valeur à stocker dans l'état partagé |
Valeur de retour
(aucun)
Exceptions
std::future_error dans les conditions suivantes :
- * this n'a pas d'état partagé. Le code d'erreur est défini sur no_state .
- L'état partagé stocke déjà une valeur ou une exception. Le code d'erreur est défini sur promise_already_satisfied .
De plus :
R
.
R
.
Exemple
#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'; }
Sortie :
Waiting... Done! Result is: 9
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2098 | C++11 | il n'était pas clair quelles exceptions devaient être levées | clarifié |
Voir aussi
|
définit le résultat à une valeur spécifique
(fonction membre publique) |
|
|
définit le résultat pour indiquer une exception tout en différant la notification jusqu'à la fin du thread
(fonction membre publique) |