gpt4 book ai didi

c++ - 在 JNI 中,是否有针对从 AttachCurrentThread() 返回的 JNIEnv 指针的清理函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:30 25 4
gpt4 key购买 nike

我想知道从 JNI 函数 AttachCurrentThread() 获得的 JNIEnv * 的生命周期。考虑以下检索 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;
}

是否有与调用 AttachCurrentThread() 相关联的清理调用?

还有,这个是轻量级的功能吗?在同一个线程中多次调用(在此示例中)RetrieveJniEnvPtr() 是标准的编程实践 - 或者代码是否应该在整个生命周期内只检索一次 JNIEnv *线程?

最佳答案

清理函数是DetachCurrentThread()。您需要构建您的代码,以便您知道您是否在现有的 Java 线程中,在这种情况下,您已经将 JNIEnv* 传递到您的 JNI 方法中,或者您处于自己设计的 native 线程中,在这种情况下,您必须在任何其他 JNI 调用之前调用 AttachCurrentThread(),然后再调用 DetachCurrentThread()。不要试图逃避这一要求。

关于c++ - 在 JNI 中,是否有针对从 AttachCurrentThread() 返回的 JNIEnv 指针的清理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com