从线程访问对象的变量

Access a Variable of an Object from Threads

我的 C++ 程序需要帮助。 我在主函数旁边开始线程:

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

info 是来自 class Foo 的对象,其中包含 bool active

稍后我将 active 更改为 trueLoop1Loop2 中的值没有改变。他们每次都一样。

我的原型函数如下所示:

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

调用函数:

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

那么我应该怎么做才能传递对象 Foo 的值,它在 main 函数中发生变化,因此 Loop 函数中的值 active 相等.

感谢您的帮助:)

std::ref returns 一个 std::reference_wrapper<T> 可以通过其转换运算符隐式转换为 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

如果函数是静态成员,它们应该有一个引用参数,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);