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