1. 程式人生 > >ndk多執行緒需要獲取JNIEnv 或c通過類名+包名建立物件使用如下方法

ndk多執行緒需要獲取JNIEnv 或c通過類名+包名建立物件使用如下方法

JavaVM* mJavaVM;
static pthread_key_t mThreadKey;

static void Android_JNI_ThreadDestroyed(void* value) {

JNIEnv *env = (JNIEnv*) value;
if (env != NULL) {
    mJavaVM->DetachCurrentThread();
    pthread_setspecific(mThreadKey, NULL);
}

}

jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv *env;
mJavaVM = vm;

if (mJavaVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
    return -1;
}

if (pthread_key_create(&mThreadKey, Android_JNI_ThreadDestroyed) != 0) { //程式結束時執行
    __android_log_print(ANDROID_LOG_ERROR, "cody", "Error initializing pthread key");
}
Android_JNI_SetupThread();

return JNI_VERSION_1_4;

}

JNIEnv* Android_JNI_GetEnv(void) {
JNIEnv *env;
int status = mJavaVM->AttachCurrentThread(&env, NULL);
if (status < 0) {
__android_log_print(ANDROID_LOG_ERROR, “cody”,”failed to attach current thread”);
return 0;
}
pthread_setspecific(mThreadKey, (void*) env);

return env;

}

int Android_JNI_SetupThread(void) {
Android_JNI_GetEnv();
return 1;
}

相關推薦

ndk執行需要獲取JNIEnv c通過+建立物件使用如下方法

JavaVM* mJavaVM; static pthread_key_t mThreadKey; static void Android_JNI_ThreadDestroyed(void* value) { JNIEnv *env = (JNIEnv*)

c# 執行使用佇列順序寫日誌的需要再優化)

using System; using System.Collections.Generic; using System.Threading; public class LogManager { /// <summary> /// 建構函式 /// </su

執行_獲取和設定執行物件名稱

package cn.itcast_03; /* * 如何獲取執行緒物件的名稱呢? * public final String getName():獲取執行緒名稱。 * 如何設定執行緒物件

Windows遍歷全盤所搜檔案,並通過執行顯示搜尋進度(C++/C

程式設計軟體,系統 軟體:VS2017 工程屬性:MFC對話方塊(其他工程屬性稍作修改也適用) 系統:windows10家庭版 主要思想 1、利用CFileFind實現查詢檔案 2、利用遞迴實現全盤搜尋 3、多執行緒實現父對話方塊搜尋檔案時,子對話方塊顯示搜尋進度 軟體執行效

執行(1):繼承Thread和實現Runnable介面

多執行緒的兩種實現方法: 1.繼承Thread類     繼承Thread類,重寫run()方法。建立多執行緒的時候,需要建立物件例項,然後呼叫start()方法。類物件的屬性屬於執行緒私有,執行緒之間互不影響。 public class ClassExtendT

《Java執行程式設計實戰》——第3章 Immutable Object(不可變物件)模式

通過使用對外可見的狀態不可變的物件,無需額外的同步訪問控制。既保證了資料一致性,又避免了同步訪問控制所產生的額外開銷和問題,也簡化了程式設計。 狀態不可變的物件:物件一經建立,其對外可見的狀態就保持不變,如String和Integer。 Immutable Object模式:將現實世界中狀態

執行/華為機試(C/C++)

題目描述 問題描述:有4個執行緒和1個公共的字元陣列。執行緒1的功能就是向陣列輸出A,執行緒2的功能就是向字元輸出B,執行緒3的功能就是向陣列輸出C,執行緒4的功能就是向陣列輸出D。要求按順序向陣列賦

執行學習筆記六之併發工具CountDownLatch和CyclicBarrier

目錄 簡介 CountDownLatch 示例 實現分析 CountDownLatch與Thread.join() CyclicBarrier 實現分析 CountDownLatch和CyclicBarrier區別 簡介

執行迴圈列印A B C D。。。。

class ProducerThread1 extends Thread {      private UserEntity userEntity;      public ProducerT

C#執行程式設計筆記(2.5)-使用CountDownEvent

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace CountDownEvent_Test { class Pr

C#執行程式設計筆記(2.7)-使用ReaderWriterLockSlim

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Collections.Generic; using System.Threading; namespace

C#執行程式設計筆記(2.1)-使用Mutex

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^Mutex是一種原始的同步方法,其只對一個執行緒授予對共享資源的獨佔訪問using System; using System.Threading; namespac

java執行:13、CountDownLatch同步輔助【計數器】

使用CountDownLatch計數器模擬賽跑比賽 import java.util.Random; import java.util.concurrent.CountDownLatch; imp

java實現執行的兩種方式繼承Thread和實現Runnable介面

 * 實現方式和繼承方式有什麼區別呢?  *         區別:  *                 繼承Thread:執行緒程式碼存放在Thread子類run方法中  *                 實現Runnable:執行緒程式碼存放在介面的子類的run方法

OpenCV使用pthread實現執行加速處理影象(C++)

OpenCV使用pthread實現多執行緒加速處理影象 目錄     POSIX執行緒(POSIX threads),簡稱Pthreads,是執行緒的POSIX標準。Pthread是由POSIX提出的一套通用的執行緒庫,在linux平臺下,它被廣泛的支援,

C#執行程式設計筆記(2.6)-使用Barrier

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace Barrier_Test { class Program

一個執行web伺服器例項(C,Linux,詳細的web伺服器原理)

系統:fedora core 5編譯器:g++實現功能:通過http協議,用瀏覽器檢視伺服器上的html,htm,jpg,jpeg,gif,png,css檔案 ,或者說檢視帶有jpg,jpeg,gif等檔案的網頁,即是web~把程式碼複製下來到linux裡,照著後面的方法編譯

C#執行程式設計筆記(2.8)-使用SpinWait

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace SpinWait_Test { class Program

執行中的佇列不一定需要執行安全

兩個執行緒,主執行緒中update update(){   while(queue.count >0){     //process....     queue.pop()   } }   子執行緒中: queue.enqueue(data)   這樣做是沒有問

beginthreadex()函式在建立執行傳入回撥函式時,好像只能傳入全域性函式的靜態成員函式,請問能不能傳入的成員函式呢(非靜態)?

C++類成員函式直接作為執行緒回撥函式2009年06月01日 星期一 17:01我以前寫執行緒時要麼老老實實照著宣告寫,要麼使用C++類的靜態成員函式來作為回撥函式,經常會因為執行緒程式碼而破壞封裝.之前雖然知道類成員函式的展開形式,但從沒想過利用過它,昨天看深入ATL時無意中學