在JNI里边想用线程,结果发现C++线程的几个重要的点,暂时没找到合适的资料详细阐述这些知识点。花了点时间终于把线程的创建,参数传递搞清楚了,特意记录下来,希望对别人有帮助。
线程创建完整code
#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 void *threadFunc(void *data) {
//参数需要做一次强转
Param *param = (Param *)data;
//日志打印,按照自己的需求处理。。
print("Thread", "message = %s type = %d",param->message, param->type);
pthread_exit(0);
return NULL;
}
C++线程使用的注意点
1.复杂参数的传递需要使用结构体
2. 结构体初始化一定要用Param *param = new Param(); 用malloc(…);是不行的!
3. 线程实际执行的函数必须定义为static void *threadFunc(void *data),除了函数名称以外别的都必须一致
4. 取参数的时候需要做一次强转:Param *param = (Param *)data;