pthread_create如何传递两个参数以上的参数

涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程 定义一个结构体 
struct mypara 
{ 
    var para1;//参数1 
    var para2;//参数2 
} 
将这个结构体指针,作为void *形参的实际参数传递 
struct mypara pstru; 
pthread_create(&ntid, NULL, thr_fn,& (pstru)); 
函数中需要定义一个mypara类型的结构指针来引用这个参数 
void *thr_fn(void *arg) 
{ 
    mypara *pstru; 
    pstru = (struct mypara *) arg; 
    pstru->para1;//参数1 
    pstru->para2;//参数2 
}
    pthread_create函数接受的参数只有一个void *型的指针,这就意味着你只能通过结构体封装超过一个以上的参数作为一个整体传递。这是pthread_create函数的接口限定的,别人已经明确表明我只接受一个参数,你硬要塞给他两个肯定会出错了。所以通过结构体这种组合结构变通一下,同样实现了只通过一个参数传递,但通过结构指针对结构数据成员的引用实现多参数的传递 这种用结构体封装多参数的用法不仅仅用在pthread_create函数中,如果你自己设计的函数需要的参数很多〉=5个以上,都可以考虑使用结构体封装,这样对外你的接口很简洁清晰,你的函数的消费者使用起来也很方便,只需要对结构体各个成员赋值即可,避免了参数很多时漏传、误传(参数串位)的问题 结构体内包含结构体完全没有问题,很多应用都这么使用
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中,我们将参数转换为正确的类型,并进行相应的操作。最后,我们释放了结构体的内存,并在主线程中等待新线程结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值