2011-07-26 51 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 >(或期货)? –