gpt4 book ai didi

multithreading - 调用 DetachCurrentThread 后崩溃

转载 作者:行者123 更新时间:2023-12-02 01:47:11 25 4
gpt4 key购买 nike

我有一个由我公司开发的私有(private)库。它允许我设置一个回调函数,这样长时间操作完成后,回调将在子线程中调用。

我应该在回调中操作JVM。这是我在回调函数中的主要代码:

JNIEnv *pEnv = NULL;
glJniContext.pJvm->AttachCurrentThread(&pEnv, NULL);
UiInkeyMsInternal(pEnv, 10000000);
glJniContext.pJvm->DetachCurrentThread();

AttachCurrentThread是将子线程附加到JVM,UiInkeyMsInternal是调用Java Method,DetachCurrentThread是将子线程分离到JVM,glJniContext.pJvm存储在native方法方法中,如下所示:

JavaVM* gs_jvm;
pEnv->GetJavaVM(&gs_jvm);
glJniContext.pJvm = gs_jvm;

使用 glJniContext.pJvm->DetachCurrentThread(); 行,程序将崩溃。但如果没有线,那就很正常了。如何分析这一现象?

还有一个问题,我可以通过AttachCurrentThread方法正常获取JNIEnv变量,但是findClass方法无法正常执行。无论我传递什么,比如“java/lang/Thread”,它都会返回0x00。这是正常现象还是我可以忽略它?

最佳答案

不要从主线程调用JNI处理函数。从主线程调用 JNI 处理函数 会导致崩溃。

关于multithreading - 调用 DetachCurrentThread 后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651806/

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