2011-07-26 74 views
1

如何使用線程期貨向量從一組線程獲取返回值?這應該工作嗎?如果不是,我該如何適應它?如何使用助推線期貨向量?

int calculate_the_answer_to_life_the_universe_and_everything() 
{ 
    return 42; 
} 

vector<packaged_task<int> > tasks; 
vector<unique_future<int> > futures; 
for (int i=0; i < 4; ++i) 
{ 
    tasks.push_back(packaged_task<int>(calculate_the_answer_to_life_the_universe_and_everything)); 
    futures.push_back(tasks.back().get_future()); 
    thread task(tasks.back()); 
} 

boost::wait_for_all(futures.begin(), futures.end()); 

回答

7

那麼這個代碼不編譯,因爲打包的任務是不可複製的。

根據問題陳述,您所需要的只是一個期貨向量,但爲什麼甚至嘗試存儲packaged_tasks?

#include <boost/thread.hpp> 
#include <iostream> 
#include <vector> 
int the_answer() 
{ 
    return 42; 
} 
int main() 
{ 

    std::vector<boost::unique_future<int> > futures; 
    for (int i=0; i < 4; ++i) 
    { 
     boost::packaged_task<int> pt(the_answer); 
     futures.push_back(pt.get_future()); 
     boost::thread task(std::move(pt)); 
    } 
    boost::wait_for_all(futures.begin(), futures.end()); 

    for(size_t n=0; n<futures.size(); ++n) 
     std::cout << futures[n].get() << ' '; 
    std::cout << '\n'; 
} 
+0

我只是好奇,沒有移動語義,如何存儲一組任務或期貨?是否還可以存儲一組shared_ptr >(或期貨)? –