簡體   English   中英

從C(NDK)調用Thread.yield()或等效項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM