boost中future的用法

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值