Bootstrap

C++类中多线程的编码方式

问题

在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方法的话,就无法直接访问到类的成员变量

;