Ho un wrapper JNI per le funzioni Java che vengono chiamate da C ... Sto provando a chiamare alcuni metodi da thread diversi e ottengo un errore quando provo ad ottenere una nuova copia del puntatore JNIEnv ... il codice che sto utilizzando è al di sotto ed è chiamato in ogni metodo:JNI - multi-thread
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 è già stata istanziata e questo (e altri metodi) eseguito quando viene chiamato dal thread principale/iniziale. Quando ottengo un valore per envRes, mantiene -2 quando si trova in una sottotrama.
che era - molto semplice controllo da parte mia lol. Basta scambiare l'ordine delle due chiamate JNI e funziona perfettamente! Grazie! – bbqchickenrobot