c++ 线程函数(类成员函数作为线程函数使用)

C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该类的对象。函数体可以通过显示调用该指针或直接访问类内成员。

回调函数是通过指针调用的函数,最常使用的回调函数就是在创建线程时,以一个函数指针以及传递给这个函数多个参数来调用线程函数来创建线程。那么一般的类成员函数是不能用作回调函数的,因为库函数在使用回调函数时,都会传递指定的符合回调函数声明的的参数给回调函数,而类成员函数隐式包含一个this指针参数,所以把类成员函数当作回调函数编译时因为参数不匹配会出错。    std::thread,它的第一个参数为函数指针,在c++中这样是获取不到其成员函数的指针,所以会报错。

解决方法一:

把成员函数设成静态成员函数,不属于某个对象,属于整个类,没有this指针。但是静态成员函数并不能使用非静态的成员变量(因为它没有某个具体对象的this指针),可通过对象或者类指针调用。

解决方法二:

把成员函数声明为友元函数,没有this指针,但是能够访问类的成员变量。

猜你喜欢

转载自blog.csdn.net/silence_lu_/article/details/82252516