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