2014-03-04 76 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)條件變量循環在集合中的所有期貨都被處理後終止。

就是這樣。