Namespaces
Variants

std:: future

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)
future
(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
Défini dans l'en-tête <future>
template < class T > class future ;
(1) (depuis C++11)
template < class T > class future < T & > ;
(2) (depuis C++11)
template <> class future < void > ;
(3) (depuis C++11)

Le modèle de classe std::future fournit un mécanisme pour accéder au résultat d'opérations asynchrones :

  • Le créateur de l'opération asynchrone peut ensuite utiliser diverses méthodes pour interroger, attendre ou extraire une valeur du std::future . Ces méthodes peuvent bloquer si l'opération asynchrone n'a pas encore fourni de valeur.
  • Lorsque l'opération asynchrone est prête à envoyer un résultat au créateur, elle peut le faire en modifiant l'état partagé (par exemple std::promise::set_value ) qui est lié au std::future du créateur.

Notez que std::future fait référence à un état partagé qui n'est partagé avec aucun autre objet de retour asynchrone (contrairement à std::shared_future ).

Table des matières

Fonctions membres

construit l'objet future
(fonction membre publique)
détruit l'objet future
(fonction membre publique)
déplace l'objet future
(fonction membre publique)
transfère l'état partagé de * this vers un shared_future et le retourne
(fonction membre publique)
Obtention du résultat
retourne le résultat
(fonction membre publique)
État
vérifie si le future a un état partagé
(fonction membre publique)
attend que le résultat devienne disponible
(fonction membre publique)
attend le résultat, retourne s'il n'est pas disponible après la durée de timeout spécifiée
(fonction membre publique)
attend le résultat, retourne s'il n'est pas disponible jusqu'à ce que le point temporel spécifié soit atteint
(fonction membre publique)

Exemples

#include <future>
#include <iostream>
#include <thread>
int main()
{
    // future from a packaged_task
    std::packaged_task<int()> task([]{ return 7; }); // encapsuler la fonction
    std::future<int> f1 = task.get_future(); // obtenir un future
    std::thread t(std::move(task)); // lancer sur un thread
    // future from an async()
    std::future<int> f2 = std::async(std::launch::async, []{ return 8; });
    // future from a promise
    std::promise<int> p;
    std::future<int> f3 = p.get_future();
    std::thread([&p]{ p.set_value_at_thread_exit(9); }).detach();
    std::cout << "Waiting..." << std::flush;
    f1.wait();
    f2.wait();
    f3.wait();
    std::cout << "Done!\nResults are: "
              << f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n';
    t.join();
}

Sortie :

Waiting...Done!
Results are: 7 8 9

Exemple avec exceptions

#include <future>
#include <iostream>
#include <thread>
int main()
{
    std::promise<int> p;
    std::future<int> f = p.get_future();
    std::thread t([&p]
    {
        try
        {
            // code qui peut lever une exception
            throw std::runtime_error("Example");
        }
        catch (...)
        {
            try
            {
                // stocker toute exception levée dans la promesse
                p.set_exception(std::current_exception());
            }
            catch (...) {} // set_exception() peut aussi lever une exception
        }
    });
    try
    {
        std::cout << f.get();
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception du thread : " << e.what() << '\n';
    }
    t.join();
}

Sortie :

Exception du thread : Example

Voir aussi

(C++11)
exécute une fonction de manière asynchrone (potentiellement dans un nouveau thread) et retourne une std::future qui contiendra le résultat
(modèle de fonction)
attend une valeur (potentiellement référencée par d'autres futures) qui est définie de manière asynchrone
(modèle de classe)