Avec les threads win32, j'ai le simple GetExitCodeThread()
qui me donne la valeur renvoyée par la fonction de thread. Je recherche quelque chose de similaire pour std::thread
(ou booster les threads)
Si je comprends bien, cela peut être fait avec des contrats à terme, mais comment exactement ?
Réponses
Trop de publicités?Voir ce didacticiel vidéo sur les futurs C++11.
Explicitement avec les threads et les futures :
#include <thread>
#include <future>
void func(std::promise<int> && p) {
p.set_value(1);
}
std::promise<int> p;
auto f = p.get_future();
std::thread t(&func, std::move(p));
t.join();
int i = f.get();
Ou avec std::async
(encapsuleur de niveau supérieur pour les threads et les futures) :
#include <thread>
#include <future>
int func() { return 1; }
std::future<int> ret = std::async(&func);
int i = ret.get();
Je ne peux pas dire si cela fonctionne sur toutes les plates-formes (il semble fonctionner sur Linux, mais ne fonctionne pas pour moi sur Mac OSX avec GCC 4.6.1).
sehe
Points
123151
Martin
Points
481