2011-07-26 3 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

패키지 작업은 복사 할 수 없으므로이 코드는 컴파일되지 않습니다.

문제 설명을 기반으로하면 패키지 테스크를 저장하려고하는 이유는 무엇입니까?

#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 > (또는 선물) 집합을 저장할 수도 있습니까? –

관련 문제