0

私のC++プログラマーに助けが必要です。 私は、main関数の横にスレッドを起動します。スレッドからオブジェクトの変数にアクセス

thread Thread1(&Foo::Loop1, info,std::ref(info)); 
thread Thread2(&Foo::Loop2, info,std::ref(info)); 

infobool active

を含むクラスFooからオブジェクト後、私はtrueactiveに変更されているが、Loop1またはLoop2の値は変化がいけません。彼らは毎回同じです。

私のプロトタイプの機能は次のようになります。だから私はそうmain機能で変更対象Fooから値を渡すために何をすべき

void Foo::Loop1(Foo info){ 
    while (true){ 
     if (info.active){ 
      //Stuff 
     } 
    } 
} 

void Loop1(Foo info); 
void Loop2(Foo info); 

呼ばれる関数Loop関数内の値activeは等しいです。

は:)

答えて

0

静的メンバーの場合は、参照パラメータFoo&が必要です。

void Loop1(Foo& info); 
void Loop2(Foo& info); 

これ以外の場合、スレッドは渡されたオブジェクトのコピーを取得します。

彼らは非静的なメンバである場合は、すべてのインスタンスを渡す必要はありません。

void Foo::Loop1(){ 
    while (true){ 
     if (active){ 
      //Stuff 
     } 
    } 
} 

thread Thread1(&Foo::Loop1, info); 
thread Thread2(&Foo::Loop2, info); 
+0

SRYが、両方のdidntは働いた:スレッド/のみ値ではなく参照を渡します。私は複数のものを試しました:/ – NicMaxFen

+0

okを得ました:)スレッドを作成したときにstd :: refを使用しました。私はFoo&あなたの例のような情報を使用した – NicMaxFen

0

std::refを助けてくれてありがとうその変換演算子を経由してT&に暗黙的に変換可能であるstd::reference_wrapper<T>を返します。 std::reference_wrapper<T>を値でTを受け入れる関数に渡すと、変換演算子が呼び出され、関数のローカルコピーTがそのコピーコンストラクタを使用して構築されます。

#include <functional> 

class Object 
{ 
    // ... 
}; 

void Func(Object obj) 
{ 
    // Some code which modifies obj 
} 

int main() 
{ 
    Object obj; 
    Func(std::ref(obj)); // <-- Conversion operator invoked, obj passed by value 
} 

Fooを参照して機能を変更してください。

関連する問題