2014-03-04 44 views
0

我想等一堆期货。当一个人准备好时,我想查找一个关联的对象。如何使用提振期货图谱?

我觉得像这样的工作

std::map<boost::shared_future<future_type>, MyObj*> futures; 
//... 
futures[future1] = my_obj_ptr1; 
futures[future2] = my_obj_ptr2; 
futures[future3] = my_obj_ptr3; 
//... 
std::map<boost::shared_future<future_type>, MyObj*>::iterator it; 
it = boost::wait_for_any(futures.begin(), futures.end()); 

,但我得到的错误是这样的:

错误: '结构的std ::对,MyObj中*>' 没有成员名为 'future_'

+0

'std :: map'是'std :: pair'的容器,它肯定不是可以等待的。 –

回答

0

它看起来很像你想要实现类似win32 WaitForMultipleObjects的东西,这在* nix中是不可能的。现在用C++ 11实现boost :: thread,有人想知道为什么在新的线程模型中没有提供等价的东西,原因在于根据你想要的策略非常快速地实现你自己的特性。

那么你想按照预定的顺序处理期货吗?

1)当每个线程完成时,将未来对象插入互斥锁保护队列。

2)然后在未来准备就绪的等待线程中发出一个条件变量。

3)等待线程唤醒并获得就绪状态并返回到等待下一个信号的状态。

4)条件变量循环在集合中的所有期货都被处理后终止。

就是这样。