C++ pthread_create如何传多个参数
时间: 2023-07-08 07:49:27 浏览: 170
PB窗口之间传递多参数的方法
5星 · 资源好评率100%
在C++中,pthread_create函数只能传递一个参数,因此如果需要传递多个参数,可以考虑使用结构体或者指针来传递。
以下是使用结构体传递多个参数的示例代码:
```c++
#include <pthread.h>
// 定义结构体来传递多个参数
struct thread_data {
int arg1;
char* arg2;
};
// 线程函数
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);
}
// 主函数
int main() {
pthread_t thread;
struct thread_data data;
data.arg1 = 42;
data.arg2 = "hello";
// 创建线程,把结构体指针传递给线程函数
pthread_create(&thread, NULL, thread_func, (void*) &data);
// do something else
pthread_exit(NULL);
}
```
在上面的示例中,我们定义了一个thread_data结构体,用于传递多个参数。在主函数中,我们先创建了一个thread_data结构体,并设置它的成员变量。然后,我们把结构体的地址传递给pthread_create函数中的第四个参数。在线程函数中,我们把void类型的参数转换成thread_data类型的指针,然后获取传递进来的参数,并进行相应的处理。
除了使用结构体,还可以使用指针来传递多个参数。以下是示例代码:
```c++
#include <pthread.h>
// 线程函数
void* thread_func(void* arg) {
int arg1 = *(int*) arg;
char* arg2 = *((char**) arg + 1);
// do something with arg1 and arg2
pthread_exit(NULL);
}
// 主函数
int main() {
pthread_t thread;
int arg1 = 42;
char* arg2 = "hello";
void* args[2] = {&arg1, arg2};
// 创建线程,把指针数组传递给线程函数
pthread_create(&thread, NULL, thread_func, (void*) args);
// do something else
pthread_exit(NULL);
}
```
在这个示例中,我们把多个参数放到一个指针数组中,并把指针数组的地址传递给pthread_create函数中的第四个参数。在线程函数中,我们先把void类型的参数转换成指针数组类型的指针,然后获取传递进来的参数,并进行相应的处理。注意,在这个示例中,我们需要使用强制类型转换来获取传递进来的参数。
阅读全文