Android C++多執行緒-建立子執行緒
1. Android C++多執行緒
1.1 Android C++ 執行緒簡介
我們都知道Android
是基於Linux
核心的,而Linux
是遵循POSIX
執行緒標準的,POSIX
執行緒庫中有一系列Pthreads API
方便我們對Linux執行緒
的操作。所以我們在Android中使用C/C++執行緒
也就轉到了使用POSIX執行緒庫
。他們都在標頭檔案“pthread.h”
中。
1.2 建立子執行緒
1.2.1 基礎概念
使用 C++ 建立子執行緒需要先了解一些基本的概念。
- pthread_t
用於宣告一個執行緒物件,例如 p_thread thread
//匯入標頭檔案 #include "pthread.h" //宣告一個執行緒 pthread_t pthread;
- pthread_creat
用於建立一個實際的執行緒如:pthread_create(&pthread,NULL,threadCallBack,NULL);總共接收4個引數,第一個引數為pthread_t物件,第二個引數為執行緒的一些屬性我們一般傳
NULL就行,第三個引數為執行緒執行的函式(void* threadCallBack(voiddata)),第四個引數是傳遞給執行緒的引數是void 型別的既,可以傳任意型別。
extern "C" JNIEXPORT void JNICALL Java_com_example_lib_JniThreadDemo_createThread(JNIEnv *env, jobject instance) { //建立 thread 物件 pthread_create(&pthread, NULL, threadCallback, NULL); }
- pthread_exit
用於退出執行緒如:pthread_exit(&thread),引數也可以傳NULL。注:執行緒回撥函式最後必須呼叫此方法,不然APP會退出(掛掉)。
//定義一個執行緒的回撥 void *threadCallback(void *data) { LOGI("Hello From C++ Thread") //執行執行緒完畢之後,退出執行緒 pthread_exit(&pthread);
1.2.2 完整程式碼
native-thread-lib.cpp完整程式碼,執行呼叫createThread
方法,會建立執行緒,並且執行執行緒,在控制檯中輸出Hello From C++ Thread
。
#include <jni.h> #include <string> #include "android/log.h" #define LOGI(FORMAT, ...) __android_log_print(ANDROID_LOG_INFO,"liaowejian",FORMAT,##__VA_ARGS__); #include "pthread.h" //宣告一個執行緒 pthread_t pthread; //定義一個執行緒的回撥 void *threadCallback(void *data) { LOGI("Hello From C++ Thread") //執行執行緒完畢之後,退出執行緒 pthread_exit(&pthread); } extern "C" JNIEXPORT void JNICALL Java_com_example_lib_JniThreadDemo_createThread(JNIEnv *env, jobject instance) { //建立 thread 物件 pthread_create(&pthread, NULL, threadCallback, NULL); }
記錄於 2018年11月9號