android - 从 C (NDK) 调用 Thread.yield() 或等效函数

标签 android c++ c multithreading android-ndk

我在 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/

相关文章:

android - 通过 Intent 启动 Mx Player

c++ - 如何在不复制的情况下更新 std::unordered_map<std::string, std::vector<int>> 中的 vector ?

c++ - 将字符串文字分配给指向 const char 的指针

c - MCP3021字节处理

java - QTcreator 使用 android 配置文件构建简单的 qt 项目

android - TextViews 的某些部分不显示并被屏幕边缘截断

c++ - 从 C++ 中的主函数返回字符串

c++ - 实现自己的随机函数是否被普遍接受? (C++)

c++ - 混合使用 C、C++ 和 Fortran 代码

android - 无法获得提供者 - 很少在 kitkat 上崩溃