У меня есть оболочка JNI для функций Java, вызываемых из C... Я пытаюсь вызвать некоторые методы из разных потоков, и я получаю сообщение об ошибке при попытке получить новую копию указателя JNIEnv... код, который я использую, находится ниже и вызывается в каждом методе:
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;
}
JVM уже был создан, и этот (и другие методы) запускаются при вызове из основного/начального потока. Когда я получаю значение для envRes, он удерживает -2, когда в подпотоке.