概述
#include <jni.h>
#include <string>
#include <iostream>
#include <functional>
#include <thread>
#include <memory>
#include <chrono>
#include <pthread.h>
#include "android/log.h"
jobject callback;
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO," jni ",__VA_ARGS__);
void todoLog(JavaVM *vm) {
JNIEnv *env;
vm->AttachCurrentThread(&env, nullptr);
//开始干活
int counts = 100;
if (callback == nullptr)return;
jclass javaClass = env->GetObjectClass(callback);
if (javaClass == nullptr) {
return;
}
jmethodID javaMethodId = env->GetMethodID(javaClass, "callBack", "(I)V");
if (javaMethodId == nullptr) {
return;
}
while (counts >= 0) {
env->CallVoidMethod(callback, javaMethodId, counts);
counts--;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
env->DeleteGlobalRef(callback);
env = nullptr;
callback = nullptr;
//收尾
vm->DetachCurrentThread();
}
extern "C"
JNIEXPORT void JNICALL
Java_com_jkkc_myapplication_NativeMethod_setCallBack(JNIEnv *env, jobject thiz, jobject call_back) {
JavaVM *vm;
env->GetJavaVM(&vm);
callback = env->NewGlobalRef(call_back);
LOGI("主线程在哪个线程%ld", std::this_thread::get_id())
std::shared_ptr<std::thread> thd_ptr = std::make_shared<std::thread>(todoLog, vm);
thd_ptr->detach();
}
最后
以上就是淡淡龙猫为你收集整理的jni 创建线程的第二种方式的全部内容,希望文章能够帮你解决jni 创建线程的第二种方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复