2012-03-14 59 views
0

如果我有這樣的仿...如何使用從仿函數與升壓::線程返回值

class DoStuff { 

    private: 

    std::vector <int> numericStuff; 

    public: 

    explicit DoStuff (const std::vector <int> &newStuff) : numericStuff (newStuff) {}; 

    int operator() (void) { 

     int ProcessedStuff = 0; 

     //...Doing stuff 

     return ProcessedStuff; 

    }; 

}; 

...現在,如果我想正常使用這一切我必須做是...

//...Vector declared and populated somewhere else 
DoStuff stuff (Vector); 
int someNumber = stuff(); 

......然後你去。我想要做的就是把它變成一個boost ::線程像這樣...

DoStuff stuff (Vector); 
boost::thread (stuff); 

...然後使用它,但我的生活,我不能找出如何。任何幫助,將不勝感激。

回答

0

你不能這樣做。要從線程「返回值」,您必須使用Futures。 從上面的文檔引用:

當包裝任務被調用時,它會調用反過來所包含的功能 ,並填充一個未來的返回值。 這是一個針對常年問題的 答案:「如何從 線程返回值?」:將您希望作爲 boost :: packaged_task運行的函數打包並將打包的任務傳遞給線程 構造函數。從打包的任務中檢索的未來可以是用於獲取返回值的 。如果函數拋出一個異常,將來存儲的 代替返回值。

+0

我明白了,謝謝。我是新的提升,當我正在閱讀線程文檔時,我沒有注意到。猜猜我最好再學習一下未來。 – 2012-03-14 21:26:07