我开始在C ++ 11中学习承诺和未来,但在这里我被困住了:
#include<iostream>
#include<future>
using namespace std;
void func(future<int> &ref)
{
cout << ref.get();
}
int main()
{
promise<int> prom;
future<int> fut = prom.get_future();
async(launch::deferred, func, ref(fut));
prom.set_value(100);
cout << "Exiting" << endl;
}
我的理解是,当我们async
与launch::deferred
时,它不会启动新主题。
所以,除非ref.get()
执行func
功能赢得return
,否则自promise
设置后不会发生这种情况。
但是我的代码成功退出了。我的理解在哪里错了?
IDE:VS2013
答案 0 :(得分:2)
deferred
异步调用只存储可调用对象和参数。
在返回 .get()
上致电future
之前,没有什么事情发生。
您放弃了返回future
的内容,因此您对async
的通话基本上是一个noop。
没有其他因素阻止main
完成,所以......