C++类中的成员函数中如何使用pthread调用另一个带参数的非静态成员函数开启线程
时间: 2024-03-22 13:37:20 浏览: 81
在C++类中使用pthread调用另一个带参数的非静态成员函数开启线程,需要注意一些细节。以下是示例代码:
```c++
#include <pthread.h>
// 定义线程参数结构体
struct thread_data {
int arg1;
char* arg2;
MyClass* obj;
};
class MyClass {
public:
void myFunc() {
pthread_t thread;
struct thread_data data;
data.arg1 = 42;
data.arg2 = "hello";
data.obj = this;
// 创建线程
pthread_create(&thread, NULL, &MyClass::thread_func, (void*) &data);
}
void thread_func(int arg1, char* arg2) {
// do something with arg1 and arg2
}
};
```
在MyClass类的成员函数myFunc中,先定义了一个thread_data结构体,用于传递给线程函数的参数。其中,结构体中的obj成员变量保存了当前对象的指针,以便在线程函数中调用非静态成员函数。然后通过pthread_create函数创建了一个新的线程,并把thread_data结构体的地址传递给了静态成员函数thread_func。在thread_func中,通过结构体指针获取传递进来的参数,并调用非静态成员函数thread_func,并通过obj指针访问当前对象的成员变量等。注意,成员函数需要使用静态成员函数作为线程函数,并通过类名调用,而不是通过对象调用。
阅读全文