从线程访问对象的变量
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
是类 Foo
中的一个对象,其中包含bool active
后来我将active
更改为true
,但Loop1
或Loop2
中的值不会更改。它们每次都是一样的。
我的原型函数如下所示:
void Loop1(Foo info);
void Loop2(Foo info);
被调用的函数:
void Foo::Loop1(Foo info){
while (true){
if (info.active){
//Stuff
}
}
}
那么我应该怎么做才能从对象传递值,Foo
该值在main
函数中发生变化,以便Loop
函数中active
的值相等。
感谢您对:)的帮助
如果函数是静态成员,它们应该有一个引用参数,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);
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
。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 将包含C样式数组的对象初始化为成员变量(C++)
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我们再次从结构对象创建结构变量?
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- 从变量对象指向基对象
- C++ - 我可以创建编译时变量对象吗?
- 动态数组添加元素而不创建结构变量/对象
- Visual Studio C++ 编译器在局部变量对象上的奇怪行为
- 其中定义函数的静态局部变量对象
- QT良好的全局变量/对象处理
- r 值的匿名变量对象与真实对象
- QT 测试 - 变量/对象失去价值
- 访问私有变量对象
- C++访问具有相同名称的变量/对象的命名空间中的全局变量/对象
- C++-访问全局变量对象
- 表达式必须具有类类型:c++,将实例变量对象作为指针传递(点表示法参数)
- C++变量/对象和堆内存管理
- 如何在每次迭代中创建一个新变量/对象的循环
- 初始化现有变量/对象的新构造函数