[英]Call Thread.yield() or equivalent from C (NDK)
我在帶有SDK 2.2的Android 2.3.3中擁有一個AsyncTask。
在任務/課程中,我正在使用帶有NDK的C庫。
我沒有在Java中使用while(condition)
循環,而是在C中使用此循環,以避免在每次循環迭代期間通過JNI進行昂貴的調用。
如果我在Java中有while(condition)
循環,那么我將在每個循環迭代的末尾調用Thread.yield()
,以使Thread被掛起。
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...)
}
不要忘記錯誤檢查。
您可以使用sched_yield()
(在史蒂文·貝爾發表評論后編輯)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.