shared_future也是一个类模板,get的时候是克隆(复制)出一个数据,而不是直接取出,所以能多次get(),下面是例子:
void testPromise(std::promise<int> &mypromise, int x)
{
cout << "我是第一个线程,正在处理数据\n";
int nresult = 0;
nresult = x + 10;
nresult += 100;
nresult -= 1;
std::this_thread::sleep_for(std::chrono::seconds(4));//经过长时间计算
int NResult = nresult;
mypromise.set_value(NResult);
}
void main()
{
std::promise<int> outpromise;
std::thread t(testPromise, std::ref(outpromise), 1000);
t.detach();
std::future<int> fu = outpromise.get_future();
//如果使用future<int>,则只能get()一次,那如何可以get()多次呢?
//第一种转换方法
//std::shared_future<int> sharedfuture(std::move(fu));
//第二种转换方法
std::shared_future<int> sharedfuture(fu.share());
//第三种转换方法 直接使用std::shared_future<int>接
//std::shared_future<int> sharedfuture = outpromise.get_future();
//第四种方法
//std::shared_future<int> sharedfuture(outpromise.get_future());
cout << sharedfuture.get() << endl;
cout << sharedfuture.get() << endl;
cout << sharedfuture.get() << endl;
Sleep(10000);//等待各个线程执行完毕
system("pause");
}
结果: