void
set_string(std::promise<std::string>& p)
{
p.set_value("set from thread");
}
int
main()
{
std::promise<std::string> p;
std::future<std::string> f = p.get_future();
std::thread t(&set_string, std::ref(p));
std::cout << f.get() << std::endl;
t.join();
}
Dlaczego muszę zadzwonić pod numer t.join()
po tym, jak zadzwonię pod numer f.get()
? Myślałem, że f.get()
zablokuje główny wątek, dopóki nie uzyska wyniku, a to oznacza, że wątek już się zakończył.Dlaczego muszę dołączyć do wątku, nawet jeśli używam std :: future :: get?