在 C++ JNI 函数(包括在下面的半伪函数)中,至少在该client_ = new VClient(&callback_)
行创建了一个(并且可能是两个)附加线程。我认为完成这个函数就足够了,但显然当下一个函数(另一个 JNICALL 函数)在此之后“立即”调用时,它会导致一个 SEGFUALT(“立即”在引号中,因为该函数被调用的速度很快有人可以按下下一个按钮)。我认为这是因为new VClient
在 Init 函数返回并调用下一个函数时创建尚未完成,因为在下client_
一个函数中使用了。
我对所有这些线程业务都很陌生,我不确定这是否是正确的思路。我习惯于顺序执行代码,因此当代码从该client_
行继续移动时,那是因为该行的所有内容都已完成。代码是否可以从这一行继续,并在新VClient
的完全创建之前从 JNI Init 函数返回?如果是这样,我如何让这个函数等到类/对象创建完成?
JNIEXPORT void JNICALL Java_com_ClassDir_Init(JNIEnv *env, jobject obj)
{
LOGI("%s", __PRETTY_FUNCTION__);
if(!client_)
{
LOGI("Initializing client");
client_ = new VClient(&callback_);
[Bunch of JNI/JAVA class and methodID lookup and saving]
}
else
LOGI("Client already initialized");
}
*这callback_
是一个处理向 JNI/JAVA 发送枚举类型信号以更新程序进度的类。