2012-06-12 12 views
43

可能性の重複:
Start thread with member functionのstd ::スレッドクラスのメソッド呼び出し

私は小さなクラスを持っている:と方法calculateを実行するために

class Test 
{ 
public: 
    void runMultiThread(); 
private: 
    int calculate(int from, int to); 
} 

どのようにその可能性パラメタの2つの異なるセット(例えば、calculate(0,10),calculate(11,20))メソッドrunMultiThread()からの2つのスレッド?

PSありがとう、私はパラメータとしてthisを渡す必要があることを忘れてしまいました。

それほど難しい

答えて

119

#include <thread> 

void Test::runMultiThread() 
{ 
    std::thread t1(&Test::calculate, this, 0, 10); 
    std::thread t2(&Test::calculate, this, 11, 20); 
    t1.join(); 
    t2.join(); 
} 

計算の結果がまだ必要とされている場合は、代わりに将来使用します。これであらゆる種類の問題

#include <future> 

void Test::runMultiThread() 
{ 
    auto f1 = std::async(&Test::calculate, this, 0, 10); 
    auto f2 = std::async(&Test::calculate, this, 11, 20); 

    auto res1 = f1.get(); 
    auto res2 = f2.get(); 
} 
+0

を。なぜアップフォース?戻り値はチェックされずに破棄されます。おそらくcalculateメソッドは何かを反復する - スレッドセーフなのだろうか? – ravenspoint

+3

@ravenspoint:スレッドセーフであるかどうかは、OPまでですか?私は戻り値が回復されるべきであることに同意しますが、OPはそれが意図していることを示していません( 'printf'のようなものかもしれません)。 'std :: async'が代わりになります。 –

+0

だからこそ私はOPに、彼が見つけた問題を尋ねました。半分の答えを叩くのではなく、OPにさらに悲しみを与えてしまうかもしれません。 – ravenspoint

関連する問題