关于JNI 实现线程

#include <thread>
#include <jni.h>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


//定义全局虚拟机对象
_JavaVM *g_javaVm;
JNIEnv *g_env;
jobject g_object;
static volatile int mIndexThreadExit = 0;


JNIEXPORT void JNICALL
Java_com_sunchip_pointreadingpen_MainActivity_initilize(
        JNIEnv *env,
        jobject thiz) {
    //出处  https://www.cnblogs.com/MMLoveMeMM/articles/3644310.html
    (*env).GetJavaVM(&g_javaVm);
    g_env=env;
    g_object=(jobject)(env->NewGlobalRef(thiz));;
    LOGE("init gray initilize");
}


JNIEXPORT void JNICALL
Java_com_sunchip_pointreadingpen_MainActivity_startReadReuslt(
        JNIEnv *env,
        jobject thiz) {
    mIndexThreadExit = 0;
    pthread_t thredId;
    if(pthread_create(&thredId,NULL,native_thread_exec,NULL)!=0){
        LOGE("startReadReuslt faild");
        return;
    }

    LOGE("init gray startReadReuslt");
}


JNIEXPORT void JNICALL
Java_com_sunchip_pointreadingpen_MainActivity_stopReadReuslt(
        JNIEnv *env,
        jobject thiz) {

        mIndexThreadExit = 1;
        LOGE("init gray stopReadReuslt");
}

//线程执行的方法
static void* native_thread_exec(void *arg){
        JNIEnv *env;

    (*g_javaVm) . AttachCurrentThread(&env,arg);
    jclass  objectClass = (*env).GetObjectClass(g_object);

    jmethodID methodid = (*env).GetMethodID(objectClass,"onResultCallBack","(I)V");
    if(methodid==NULL){
        LOGE("create callback class null");
        return 0;
    }
    LOGE("create thread loop enter");
    int count = 0;
    while(!mIndexThreadExit){
        //env->CallVoidMethod(objectClass,methodid,count++)
        (*env).CallVoidMethod(objectClass,methodid,count++);
        //(*env)->CallVoidMethod(env,objectClass,objectClass,count++);
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }

    (*g_javaVm).DetachCurrentThread();
    LOGE("create thread loop DetachCurrentThread");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值