c++ 线程创建 参数传递

本文介绍了如何在C++中使用pthread_create创建线程,并详细解释了成员函数作为线程函数时必须是static的原因。此外还提供了多参数传递的技巧、线程函数的正确声明方式以及参数转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C++的中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static !
在C语言中,我们使用pthread_create创建线程,线程函数是一个全局函数,所以在C++中,创建线程时,也应该使用一个全局函数。static定义的类的成员函数就是一个全局函数。

C++线程使用的注意点
1.多个参数的传递需要使用结构体
2. 结构体初始化一定要用Param *param = new Param(); 用malloc(..);是不行的!
3. 在类中,线程实际执行的函数必须定义为static void *threadFunc(void *data),除了函数名称以外别的都必须一致;
4. 在类外的线程主函数,可以不是static的
4. 取参数的时候需要做一次强转:Param param = (Param )data;

#include <stdio.h>
#include <pthread.h>
//数据传递的结构体
struct Param {
    int type;
    char *message;
};

void createThread() {
    //定义传递参数的结构体,注意这里的new操作,这里非常重要!
    Param *param = new Param();
    param->type = 1024;
    param->message = "thread message";
    //这里函数指针*threadFunc采用&threadFunc
    //参数void *data使用param指针
    pthread_create(&pt, NULL, &threadFunc, param);
}

//**必须是static的静态函数****注意:这里我认为可以不是static的**
static void *threadFunc(void *data) {
    //参数需要做一次强转
    Param *param = (Param *)data;
    //日志打印,按照自己的需求处理。。
    print("Thread", "message = %s type = %d",param->message, param->type);
    pthread_exit(0);
    return NULL;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值