首页 > 其他 > 详细

JNI|在子线程中获得JNIEnv|AttachCurrentThread

时间:2014-03-04 00:35:33      阅读:578      评论:0      收藏:0      [点我收藏+]

A JNI interface pointer (JNIEnv*) is passed as an argument for each native function mapped to a Java method, allowing for interaction with the JNI environment within the native method.This JNI interface pointer can be stored, but remains valid only in the current thread. Other threads must first call AttachCurrentThread()to attach themselves to the VM and obtain a JNI interface pointer. Once attached, a native thread works like a regular Java thread running within a native method. The native thread remains attached to the VM until it callsDetachCurrentThread() to detach itself.[3]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void Call_Back_Invoke( void *user,int notify_id, unsigned int param )
{
    bool  isAttacked = false;
    JNIEnv* env;
    if(NULL == jni_tmpc.g_JVM)
    {
        LOGE("g_JVM == NULL");
        return ;
    }
    int status = (jni_tmpc.g_JVM)->GetEnv((void **) &env, jni_tmpc.g_JNI_VERSION);
 
    if(status < 0) {
        LOGD("callback_handler:failed to get JNI environment assuming native thread");
        status = jni_tmpc.g_JVM->AttachCurrentThread(&env, NULL);
        if(status < 0) {
           LOGE("callback_handler: failed to attach current thread");
            return;
        }
        isAttacked = true;
    }
 
    switch( notify_id ){
      case...
      }
    if(isAttacked) {
      (jni_tmpc.g_JVM)->DetachCurrentThread();
    }  
    LOGE("jni Call_Back_Invoke(1) notify_id = %d",notify_id );
}

JNI|在子线程中获得JNIEnv|AttachCurrentThread,布布扣,bubuko.com

JNI|在子线程中获得JNIEnv|AttachCurrentThread

原文:http://www.cnblogs.com/porter/p/3578357.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!