Namespaces
Variants

std::promise<R>:: set_value_at_thread_exit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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 :

1) Toute exception levée par le constructeur sélectionné pour copier un objet de type R .
2) Toute exception levée par le constructeur sélectionné pour déplacer un objet de type 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)