Tengo un contenedor JNI para funciones Java que se llaman desde C ... Estoy intentando llamar a algunos métodos de diferentes hilos y me sale un error al intentar obtener una nueva copia del puntero JNIEnv ... el código que estoy usando es de abajo y es llamado en cada método:JNI - multi hilos
JNIEnv* GetJniEnvHandle(){
ThreadInfo();
JNIEnv *envLoc;
//if(Thread::CurrentThread->IsBackground || Thread::CurrentThread->IsThreadPoolThread)
jint envRes = vm->GetEnv((void**)&envLoc, JNI_VERSION_1_4);
if(envRes == JNI_OK){
if(ThreadId != Thread::CurrentThread->ManagedThreadId)
jint res = vm->AttachCurrentThread((void**)&envLoc, NULL);
}else{
Log("Error obtaining JNIEnv* handle");
}
return envLoc;
}
la JVM ya ha sido creada y esto (y otros métodos) se ejecutan cuando se llama desde el hilo principal/inicial. Cuando obtengo un valor para envRes tiene un -2 cuando está en un sub thread.
eso fue todo - supervisión muy simple por mi parte jajaja. ¡Simplemente cambié el orden de las dos llamadas JNI y funciona perfectamente! ¡Gracias! – bbqchickenrobot