多線程以及生產(chǎn)者和消費者模型_第1頁
多線程以及生產(chǎn)者和消費者模型_第2頁
多線程以及生產(chǎn)者和消費者模型_第3頁
多線程以及生產(chǎn)者和消費者模型_第4頁
多線程以及生產(chǎn)者和消費者模型_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

FFmpeg打造Android萬能音頻播放器楊萬里Android工程師

CSDN博客:郵箱:AndroidC++多線程2、創(chuàng)建子線程3、生產(chǎn)者和消費者模型4、C++全局調(diào)用Java方法1、AndroidC++線程簡介AndroidC++線程簡介

我們都知道Android是基于Linux內(nèi)核的,而Linux是遵循POSIX線程標準的,POSIX線程庫中有一系列PthreadsAPI方便我們對Linux線程的操作。所以我們在Android中使用C/C++線程也就轉(zhuǎn)到了使用POSIX線程庫。他們都在頭文件“pthread.h”中。創(chuàng)建子線程1、pthread_t:用于聲明一個線程對象如:pthread_t

thread;

2、pthread_creat

:用于創(chuàng)建一個實際的線程如:pthread_create(&pthread,NULL,threadCallBack,NULL);其總共接收4個參數(shù),第一個參數(shù)為pthread_t對象,第二個參數(shù)為線程的一些屬性我們一般傳NULL就行,第三個參數(shù)為線程執(zhí)行的函數(shù)(

void*

threadCallBack(void

*data)

),第四個參數(shù)是傳遞給線程的參數(shù)是void*類型的既可以傳任意類型。3、pthread_exit:用于退出線程如:pthread_exit(&thread),參數(shù)也可以傳NULL。注:線程回調(diào)函數(shù)最后必須調(diào)用此方法,不然APP會退出(掛掉)。

生產(chǎn)者和消費者模型1、pthread_mutex_t

:用于創(chuàng)建線程鎖對象如:pthread_mutex_t

mutex;

2、pthread_mutex_init

:用于初始化pthread_mutex_t鎖對象如:pthread_mutex_init(&mutex,

NULL);

3、pthread_mutex_destroy

:用于銷毀pthread_mutex_t鎖對象如:pthread_mutex_destroy(&mutex);

4、pthread_cond_t

:用于創(chuàng)建線程條件對象如:pthread_cond_t

cond;

5、pthread_cond_init

:用于初始化pthread_cond_t條件對象如:pthread_cond_init(&cond,

NULL);

6、pthread_cond_destroy

:用于銷毀pthread_cond_t條件對象如:pthread_cond_destroy(&cond);

7、pthread_mutex_lock

:用于上鎖mutex,本線程上鎖后的其他變量是不能被別的線程操作的如:pthread_mutex_lock(&mutex);

8、pthread_mutex_unlock

:用于解鎖mutex,解鎖后的其他變量可以被其他線程操作如:pthread_mutex_unlock(&mutex);

9、pthread_cond_signal

:用于發(fā)出條件信號如:pthread_cond_signal(&mutex,

&cond);

10、pthread_cond_wait

:用于線程阻塞等待,直到pthread_cond_signal發(fā)出條件信號后才執(zhí)行退出線程阻塞執(zhí)行后面的操作。

C++全局調(diào)用Java方法1、C++主線程調(diào)用Java方法2、C++子線程調(diào)用Java方法C++主線程調(diào)用Java方法1、根據(jù)jobject獲取jclass(靜態(tài)方法就不用這一步了)如:jclass

clz

=

env->GetObjectClass(jobj);2、獲取jmethodid如:jmethodidjmid

=

env->GetMethodID(clz,

"onError",

"(ILjava/lang/String;)V")3、調(diào)用方法如:jenv->CallVoidMethod(jobj,

jmid,

code,

jmsg)

C++子線程調(diào)用Java方法由于JniEnv是線程相關(guān)的,所以子線程中不能使用創(chuàng)建線程的JniEnv;而JVM是進程相關(guān)的,所以可以通過JVM來獲取當前線程的JniEnv,然后就可以調(diào)用Java的方法了。1、獲取JVM對象:JNI_OnLoad(JavaVM*

vm,void*

reserved)2、通過JVM獲取JniEnv:JNIEnv

*env;

jvm->AttachCurrentThread(&env,

0);/* callJavaMethoid*/

jvm->DetachCurrentThread();THANKSCSDN網(wǎng)站:企業(yè)服務(wù):人才服務(wù):CTO俱樂部:高校俱樂部:程序員雜志:CODE平臺:項目外包:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論