#include <future>
using namespace std;
void t1(promise<int> p)
{
this_thread::sleep_for(chrono::seconds(5));
p.set_value(0);
}
void t2(shared_ptr<promise<int>> p)
{
this_thread::sleep_for(chrono::seconds(5));
p->set_value(0);
}
future<int> f1()
{
promise<int> p;
async(t1, move(p));
return p.get_future();
}
future<int> f2()
{
auto p = make_shared<promise<int>>();
async(t2, p);
return p->get_future();
}
int main()
{
f1().get();
f2().get();
return 0;
}
我的问题是:
如何将std::promise
个对象传递到一个帖子中,按std::move
或std::shared_ptr
传递?
哪个更好?
答案 0 :(得分:6)
首先获得未来,然后将承诺转移到线程中。
std::future<int> f() {
std::promise<int> p;
auto r=p.get_future();
std::async(t1, move(p));
return r;
}
当然这是愚蠢的,因为在任务完成之前你使用async
阻塞。但正确使用promise
。
分享承诺是不好的,它应该具有唯一的所有权,因为只有一个应该设置其值。而那些人应该拥有它的一生。
离开之后,你再也无法从中获得未来。