スレッド優先度のあいまいなpthread apiは、奇妙なことには理解できないだけでなく、アンドロイドでは機能しません。c/C++でのAndroidのネイティブスレッドの優先度を変更してください
スレッドの優先度を減らしたり上げたりする方法はありますか?
int currentPolicy;
struct sched_param sched;
status = pthread_getschedparam(pthread_self(), ¤tPolicy, &sched);
printf("sched.sched_priority:%d currentPolicy:%d", sched.sched_priority, currentPolicy);
printf("priority min/max:%d/%d", sched_get_priority_min(currentPolicy), sched_get_priority_max(currentPolicy));
出力:
sched.sched_priority:0 currentPolicy:0
優先最小/最大:0/0また
、どんなに私は何をすべきか、pthread_setschedparamの常に私のためにエラーを返します(無効な引数)。 私のコードでは、ハンドラスレッドの優先度を下げて、他のスレッドがより多くのCPU時間を使用していることを確認する必要があります。または、代わりに私のプロセスで他のスレッドと比較して、より多くのCPUとして使用したい他のスレッドのスレッド優先度を上げることができます。
これを行う方法はありますか?私はネイティブのC++コードのみを使用します。
編集:この投稿からアンドロイドのスレッドは、軽量プロセスのいくつかの種類であり、それらの優先順位を変更するように見えるsetpriorityを使用する必要があります。関数が動作するように見えます(前後のgetpriorityは優先度が変更されたことを示します)。しかし、私は私のアプリで期待された効果が表示されません。
"* ... pthread_setschedparamは常に私のためにエラーを返します(引数が無効です)。" "なので、あなたが関数に渡したものが' EINVAL'を返すように見せてもらえますか? – alk
for currentPolicy利用可能なすべての値(0,1,2,3)を渡そうとしました。 sched.sched_priorityについては、私は別の値(-10,10など)を設定しようとしました。すべて失敗します。 – Pavel