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