如果这个函数有多个输入参数呢
时间: 2024-03-25 10:39:07 浏览: 15
如果线程执行的函数有多个输入参数,我们可以将多个参数打包成一个结构体,然后将结构体的地址作为参数传递给 `pthread_create` 函数。示例代码如下:
```c
#include <pthread.h>
#include <stdio.h>
typedef struct {
int num1;
int num2;
} ThreadArgs;
void *thread_func(void *arg) {
ThreadArgs *args = (ThreadArgs *)arg;
int num1 = args->num1;
int num2 = args->num2;
printf("Hello, I am a new thread, and the input numbers are %d and %d.\n", num1, num2);
return NULL;
}
int main() {
pthread_t tid;
ThreadArgs args = {123, 456};
int ret = pthread_create(&tid, NULL, thread_func, &args);
if (ret != 0) {
printf("pthread_create error: %d\n", ret);
return -1;
}
printf("Main thread.\n");
pthread_join(tid, NULL);
return 0;
}
```
在这个示例代码中,我们定义了一个 `ThreadArgs` 结构体,包含了两个整数类型的参数 `num1` 和 `num2`。在主函数中,我们将两个参数打包成一个 `ThreadArgs` 结构体,并将其地址作为第四个参数传递给 `pthread_create` 函数。在线程执行函数 `thread_func` 中,我们先将参数的类型转换为 `ThreadArgs` 结构体类型,并通过 `->` 运算符获取 `num1` 和 `num2` 的值。
需要注意的是,如果结构体中包含指针类型的成员,需要确保指针指向的内存空间在传递给线程执行函数之前有效,否则会出现未定义行为。