int fab(int n){
if(0==n||1==n) return 1;
return fab(n-1)+fab(n-2);
}
int main(){
packaged_task<int> pt(boost::bind(fab,10));
unique_future<int> f=pt.get_future();
thread(boost::move(pt));
f.wait();
cout<<f.get()<<endl;
std::system("pause");
return 0;
}
上述用于计算任务的代码。
使用多个future:
int main(){
typedef packaged_task<int> pti_t;
typedef unique_future<int> fi_t;
boost::array<pti_t,5> ap;
boost::array<fi_t,5> au;
for(int i=0;i<5;++i){
ap[i]=pti_t(boost::bind(fab,i+10));
au[i]=ap[i].get_future();
thread(boost::move(ap[i]));
}
wait_for_all(au.begin(),au.end());
BOOST_FOREACH(unique_future<int>& f,au){
cout<<f.get()<<endl;
}
std::system("pause");
return 0;
}
结果:
89
144
233
377
610
也可以用wait_for_any
wait_for_any(au[1],au[2]);
BOOST_FOREACH(unique_future<int>& f,au){
if(f.is_ready()&&f.has_value()){
cout<<f.get()<<endl;
}
}
用promise可以利用参数返回值:
int fab(int n){
if(0==n||1==n) return 1;
return fab(n-1)+fab(n-2);
}
void fab2(int n,promise<int>* p){
p->set_value(fab(n));
}
int main(){
promise<int> p;
unique_future<int> f=p.get_future();
thread(fab2,10,&p);
f.wait();
cout<<f.get()<<endl;
std::system("pause");
return 0;
}