我有一个使用Boost的线程堆栈。我有两个方法运行类,例如:
class class1 {
public:
class1::class1(){
void run() { //I need to call getA
}
}
};
class class2 {
private:
float A;
public:
class2:class2() { A = 0; }
void run() { A++; }
float getA() { return A; }
};
在main函数中,我将两个run方法作为线程:
void main(){
class1 c1;
class2 c2;
boost::thread t1(&class1::run,c1);
boost::thread t1(&class2::run,c2);
t1.join();
t2.join();
}
我没有尝试过使用互斥锁。我还在c1中创建了一个c2指针,但该值未更新。
当一个类在其实例位于不同的线程中时,如何在另一个类中调用该方法?
答案 0 :(得分:0)
首先,一些澄清:
现在,为了将对象传递给线程函数,请查看例如Boost.Bind。由于在线程中调用这些内容并不重要,您还可以将对class2
实例的引用传递给class1
的ctor并将其存储在那里。其中很大程度上取决于你真正想要的东西。但是,还有一个注释:如果您在线程之间共享对象,则必须以某种方式同步对它们的访问,例如,使用互斥锁。
PS:C ++ 11有自己的线程,我更喜欢Boost.Thread。它们大多是相同的,但其中一个是标准的,而Boost仍然是一个插件。