pthread_create传递结构体
时间: 2024-04-27 13:16:57 浏览: 99
pthread_create函数是用于创建一个新的线程的函数,它的原型如下:
```c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
```
其中,最后一个参数arg是传递给新线程的参数。如果需要传递多个参数,可以使用结构体来封装这些参数,然后将结构体的地址作为arg传递给pthread_create函数。
下面是一个示例代码,演示了如何使用结构体传递参数给新线程:
```c
#include <stdio.h>
#include <pthread.h>
// 定义一个结构体来封装参数
typedef struct {
int a;
int b;
} ThreadArgs;
// 新线程的入口函数
void* threadFunc(void* arg) {
// 将参数转换为正确的类型
ThreadArgs* args = (ThreadArgs*)arg;
// 访问结构体中的成员变量
int sum = args->a + args->b;
// 打印结果
printf("Sum: %d\n", sum);
// 释放内存
free(args);
// 返回结果(可选)
return NULL;
}
int main() {
// 创建结构体并设置参数
ThreadArgs* args = (ThreadArgs*)malloc(sizeof(ThreadArgs));
args->a = 3;
args->b = 4;
// 创建新线程,并传递结构体的地址作为参数
pthread_t thread;
pthread_create(&thread, NULL, threadFunc, args);
// 等待新线程结束
pthread_join(thread, NULL);
return 0;
}
```
在上面的示例中,我们定义了一个ThreadArgs结构体来封装两个整数参数。然后在主线程中创建了一个ThreadArgs结构体的实例,并设置了参数的值。接着,我们调用pthread_create函数创建了一个新线程,并将结构体的地址作为参数传递给新线程。在新线程的入口函数threadFunc中,我们将参数转换为正确的类型,并进行相应的操作。最后,我们释放了结构体的内存,并在主线程中等待新线程结束。
阅读全文