2011-08-04 4 views
2

私はSDK 2.2のAndroid 2.3.3にAsyncTaskを持っています。Thread.yield()またはそれと同等のものをC(NDK)と呼んでください

タスク/クラス内では、私はNDKでCライブラリを利用しています。

Javaでwhile(condition)ループを使用する代わりに、Cでこのループを使用して、各ループ反復中にJNI経由で高価な呼び出しを行わないようにします。

私がwhile(condition)ループをJavaで使用していた場合、スレッドの中断を可能にするために、各ループ反復の最後にThread.yield()を呼び出します。

Cで同じ動作をする可能性はありますか? Cのwhile(condition)ループの最後にusleep(10)と試しましたが、期待された動作が得られませんでした。

提案がありますか?

+0

質問にCタグを追加して、購読しているユーザーに表示させることができます。 –

+0

あなたはそうです。ありがとうございました。 –

+2

私はアンドロイドについては分かりませんが、 "Thread.yield()"、 "sched_yield()"、 "pthread_yield()"、 "Sleep(0)"などのプラットフォームでは実際にはいいえ。 –

答えて

2

を使用できsched_yield()

+4

Androidにはpthread_yield()がありません。代わりにPOSIX sched_yield()を使用する必要があります。 –

+0

@StevenBellこれが答えになるはずです – Eun

3

1は本当に、次のいずれかが行うことができます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...)  
} 

エラーチェックを忘れないでください。

関連する問題