• 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 );
    }
  • 相关阅读:
    某个账号微信的微信朋友圈内容抓取 部分好友内容抓取
    密钥登录
    CPU处理器架构和工作原理浅析
    perl 安装Net::ZooKeeper
    perl 安装Net::ZooKeeper
    thinkphp 常用的查询
    thinkphp 常用的查询
    ThinkPHP 3.1.2 模板中的基本语法<2>
    ThinkPHP 3.1.2 模板中的基本语法<2>
    perl post 带上请求头
  • 原文地址:https://www.cnblogs.com/porter/p/3578357.html
Copyright © 2020-2023  润新知