我如何使用助推期货地图?

时间:2014-03-04 17:50:35

标签: c++ multithreading boost future

我想等待一系列期货。当一个人准备就绪时,我想查找一个相关的对象。

我认为这样的事情会起作用

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());

但我得到这样的错误:

错误:'struct std :: pair,MyObj *&gt;'没有名为'future _'的成员

1 个答案:

答案 0 :(得分:0)

看起来你想要实现类似于win32 WaitForMultipleObjects的东西,这在* nix中是不可能的。现在有了在C ++ 11中实现的boost :: thread,有些人想知道为什么在新的线程模型中没有提供等效的东西,原因是根据你想要的策略很快就很难实现你自己的东西。

所以你想准备好处理期货吗?

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

2)然后在等待线程中发出一个条件变量,告知未来准备好了。

3)等待线程唤醒并获得准备好的未来并返回条件以等待下一个信号。

4)一旦处理了集合中的所有期货,条件变量循环就会到期。

就是这样。