Dan*_*aum 4 c++ java-native-interface
我想知道JNIEnv *从JNI函数中获得的生命周期AttachCurrentThread().考虑以下检索JNIEnv指针的函数.
JNIEnv * RetrieveJniEnvPtr()
{
JavaVM * pJavaVM; // Assume pJavaVM is already initialized
JNIEnv * pEnv = NULL;
if(pJavaVM->GetEnv((void**)&pEnv, JNI_VERSION_1_6) != JNI_OK)
{
pJavaVM->AttachCurrentThread((void**) &pEnv, NULL);
}
return pEnv;
}
Run Code Online (Sandbox Code Playgroud)
是否有与呼叫相关的清理呼叫AttachCurrentThread()?
另外,这是一个轻量级的功能吗?RetrieveJniEnvPtr()在同一个线程中多次调用(在此示例中)是标准编程实践- 还是代码只能JNIEnv *在线程的生命周期内检索一次?
清理功能是DetachCurrentThread().你需要构建你的代码,以便你知道你是否在现有的Java线程中,在这种情况下你已经将JNIEnv*传递到你的JNI方法中,或者你是在你自己设计的本机线程中,在这种情况下你必须AttachCurrentThread()在任何其他JNI 呼叫之前呼叫,DetachCurrentThread()然后再呼叫.不要试图隐瞒这个要求.
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |