我想等待一系列期货。当一个人准备就绪时,我想查找一个相关的对象。
我认为这样的事情会起作用
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 _'的成员
答案 0 :(得分:0)
看起来你想要实现类似于win32 WaitForMultipleObjects的东西,这在* nix中是不可能的。现在有了在C ++ 11中实现的boost :: thread,有些人想知道为什么在新的线程模型中没有提供等效的东西,原因是根据你想要的策略很快就很难实现你自己的东西。
所以你想准备好处理期货吗?
1)当每个线程完成时,将future对象插入到互斥锁保护队列中。
2)然后在等待线程中发出一个条件变量,告知未来准备好了。
3)等待线程唤醒并获得准备好的未来并返回条件以等待下一个信号。
4)一旦处理了集合中的所有期货,条件变量循环就会到期。
就是这样。