static void* nativeWorkerThread (void* args) { JNIEnv* env = NULL; if (0 == gVm->AttachCurrentThread(&env,NULL)) { NativeWorkerArgs* nativeWorkerArgs = (NativeWorkerArgs *) args; Java_com_massky_shareptr_MainActivity_nativeWorker(env, gObj, nativeWorkerArgs->id, nativeWorkerArgs->iterations); delete nativeWorkerArgs; gVm->DetachCurrentThread();
}
// Native worker thread arguments struct NativeWorkerArgs { jint id; jint iterations; }; // Method ID can be cached static jmethodID gOnNativeMessage = NULL; // Java VM interface pointer static JavaVM *gVm = NULL; // Global reference to object static jobject gObj = NULL; // Mutex instance static pthread_mutex_t mutex; jint JNI_OnLoad(JavaVM *vm, void *reserved) { // Cache the JavaVM interface pointer gVm = vm; return JNI_VERSION_1_4; }