c++ 线程创建 参数传递

在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;
}

你可能感兴趣的:(c++ 线程创建 参数传递)