Android C++多線程-創(chuàng)建子線程

1. Android C++多線程

1.1 Android C++ 線程簡介

我們都知道Android是基于Linux內(nèi)核的,而Linux是遵循POSIX線程標(biāo)準(zhǔn)的,POSIX線程庫中有一系列Pthreads API方便我們對(duì)Linux線程的操作。所以我們在Android中使用C/C++線程也就轉(zhuǎn)到了使用POSIX線程庫。他們都在頭文件 “pthread.h” 中。

1.2 創(chuàng)建子線程

1.2.1 基礎(chǔ)概念

使用 C++ 創(chuàng)建子線程需要先了解一些基本的概念。

  • pthread_t

用于聲明一個(gè)線程對(duì)象,例如 p_thread thread

//導(dǎo)入頭文件
#include "pthread.h"

//聲明一個(gè)線程
pthread_t pthread;
  • pthread_creat

用于創(chuàng)建一個(gè)實(shí)際的線程如:pthread_create(&pthread,NULL,threadCallBack,NULL);總共接收4個(gè)參數(shù),第一個(gè)參數(shù)為pthread_t對(duì)象,第二個(gè)參數(shù)為線程的一些屬性我們一般傳
NULL就行,第三個(gè)參數(shù)為線程執(zhí)行的函數(shù)(void* threadCallBack(void data)),第四個(gè)參數(shù)是傳遞給線程的參數(shù)是void類型的既,可以傳任意類型。

extern "C"
JNIEXPORT void JNICALL
Java_com_liaowj_jni_thread_JniThreadDemo_createThread(JNIEnv *env, jobject instance) {

    //創(chuàng)建 thread 對(duì)象
    pthread_create(&pthread, NULL, threadCallback, NULL);

}
  • pthread_exit

用于退出線程如:pthread_exit(&thread),參數(shù)也可以傳NULL。注:線程回調(diào)函數(shù)最后必須調(diào)用此方法,不然APP會(huì)退出(掛掉)。

//定義一個(gè)線程的回調(diào)
void *threadCallback(void *data) {

    LOGI("Hello From C++ Thread")

    //執(zhí)行線程完畢之后,退出線程
    pthread_exit(&pthread);

1.2.2 完整代碼

native-thread-lib.cpp完整代碼,執(zhí)行調(diào)用 createThread 方法,會(huì)創(chuàng)建線程,并且執(zhí)行線程,在控制臺(tái)中輸出 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"

//聲明一個(gè)線程
pthread_t pthread;

//定義一個(gè)線程的回調(diào)
void *threadCallback(void *data) {

    LOGI("Hello From C++ Thread")

    //執(zhí)行線程完畢之后,退出線程
    pthread_exit(&pthread);
}

extern "C"
JNIEXPORT void JNICALL
Java_com_liaowj_jni_thread_JniThreadDemo_createThread(JNIEnv *env, jobject instance) {

    //創(chuàng)建 thread 對(duì)象
    pthread_create(&pthread, NULL, threadCallback, NULL);

}

JniThreadDemo.java

public class JniThreadDemo {

    static {
        System.loadLibrary("native-thread-lib");
    }

    public native void createThread();

}

/**
 * @author liaowj
 * @time 2019/1/1 12:38 AM
 * @desc
 **/
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void createThread(View view) {
        JniThreadDemo jniThreadDemo = new JniThreadDemo();

        jniThreadDemo.createThread();

    }
}
控制臺(tái)輸出log

項(xiàng)目源碼:
https://github.com/liaowjcoder/Jni4Android

記錄于 2018年11月9號(hào)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,127評(píng)論 2 59
  • Linux線程概述 了解如何正確運(yùn)用線程是每一個(gè)優(yōu)秀程序員必備的素質(zhì)。 線程類似于進(jìn)程。如同進(jìn)程,線程由內(nèi)核按時(shí)間...
    batbattle閱讀 2,348評(píng)論 0 5
  • 自從上了PCP(專業(yè)教練認(rèn)證)課程后,一直在不斷總結(jié)和反思,知道了自己性格特點(diǎn)中有:怕痛和喜歡逃避的特點(diǎn),現(xiàn)在已經(jīng)...
    水中的精靈閱讀 750評(píng)論 0 2
  • #100天閱讀計(jì)劃#?糖尿病看這本就夠了 由于工作原因,接觸到很多哺乳期媽媽,在和寶媽們溝通的過程中了解到很多寶媽...
    healthylife828閱讀 224評(píng)論 0 0

友情鏈接更多精彩內(nèi)容