zoukankan      html  css  js  c++  java
  • JNI|在子线程中获得JNIEnv|AttachCurrentThread

    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]

    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 );
    }
  • 相关阅读:
    (一)类数组对象NodeList
    childNodes遍历DOM节点树
    innerText兼容问题处理
    JS中定义对象的几种方式
    javaScript中闭包的工作原理
    输出一组数字中的最小数
    HttpServletResponse对象
    Web.xml过滤器配置及执行顺序概念
    pageContext对象的用法详述
    请求转发与请求重定向
  • 原文地址:https://www.cnblogs.com/porter/p/3578357.html
Copyright © 2011-2022 走看看