我在 Android 2.3.3 和 SDK 2.2 中有一个 AsyncTask。
在任务/类中,我使用带有 NDK 的 C 库。
我没有在 Java 中使用 while(condition)
循环,而是在 C 中使用此循环,以避免在每次循环迭代期间通过 JNI 进行昂贵的调用。
如果我在 Java 中有 while(condition)
循环,我会在每次循环迭代结束时调用 Thread.yield()
以允许线程获得暂停。
C 中是否有可能获得相同的行为?
我在 C 中的 while(condition)
循环末尾使用 usleep(10)
进行了尝试,但没有得到预期的行为。
有什么建议吗?
最佳答案
如果确实想从 C 代码调用 Thread.yield(),可以执行以下操作:
Java_de_company_MyClass_setupJNI(JNIEnv* env, jobject thiz) {
(...snip...)
jclass threadClass = (*env)->FindClass(env, "java/lang/Thread");
jmethodID yieldFunctionID = (*env)->GetStaticMethodID(env, threadClass, "yield", "()V");
(*env)->CallStaticVoidMethod(env, threadClass, yieldFunctionID);
(...snip...)
}
不要忘记错误检查。
关于android - 从 C (NDK) 调用 Thread.yield() 或等效函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938066/