如何使用提振期货地图



我想等待一系列期货。 当一个准备好时,我想查找一个关联的对象。

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

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::p air,MyObj*>"没有名为"future_"的成员

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

所以你想按准备好的顺序处理期货吗?

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

2)然后在等待线程中向条件变量发出信号,表明未来已准备就绪。

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

4) 条件变量循环在集合中的所有期货都处理完毕后到期。

就是这样。

最新更新