问题
在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。
但是这个方式在处理线程时会碰到一个问题。
考虑下面一个简单的场景:
class demoC
{
public:
std::thread t;
int x;
void threadFunc()
{
std::cout<<x<<std::endl;
}
demoC()
{
t = std::thread(threadFunc);
}
};
int main() {
demoC demo;
}
一个类中有一个线程对象,并编写一个对应线程函数,在初始化时启动这个线程。
而且这个线程中是需要访问到类中的其他成员变量的。
这是面向对象语言的一个搭建类的基本方法。
但是上面的代码是无法编译通过的:
也就是说作为线程函数是需要为一个static方法的。
但是如果把类中的这个方法threadFunc方法定义成static方法的话,就无法直接访问到类的成员变量