2012-03-14 22 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(); 

...そこに行きます。私は何をしたい... ::ブーストにそれをスローし、このようなスレッド

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

です...そして、それを使用しますが、私の人生のために私はどのように見つけることができません。どんな助けもありがとう。

答えて

0

これはできません。スレッドから「値を返す」には、Futuresを使用する必要があります。 は上記文書からの引用:パッケージ化されたタスクが呼び出されると

、それは順番に含まれる機能 を呼び出し、戻り値と将来に移入します。 これは、 という多年生の質問に対する答えです。「 スレッドからどのように値を返すのですか?」:実行したい機能を boost :: packaged_taskとしてパッケージ化し、パッケージ化されたタスクをスレッド コンストラクタに渡します。パッケージされたタスクから取り出された未来は、 で戻り値を取得することができます。この関数が例外をスローする場合は、戻り値の代わりに将来格納される です。

+0

ありがとうございました。私はブーストのために新しく、スレッドのドキュメントを読んでいたときにそれを理解しませんでした。私は先物についてもっと学ぶべきだと思います。 –

関連する問題