在c / c中更改Android上的本机线程优先级

前端之家收集整理的这篇文章主要介绍了在c / c中更改Android上的本机线程优先级前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
疯狂地晦涩的pthread api线程优先级不仅是陌生的不可理解,而且它只是在 Android上不起作用.

那么,有没有办法减少或增加线程的优先级?

int currentPolicy;
struct sched_param sched;
status = pthread_getschedparam(pthread_self(),&currentPolicy,&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

priority min/max:0/0

另外,无论我做什么,pthread_setschedparam总是为我返回一个错误(参数无效).
在我的代码中,我需要减少我的处理程序线程的优先级,以确保其他线程使用更多的cpu时间.或者,或者,我可以提高我的其他线程的线程优先级,我想要使用更多的cpu与我的过程中的其他线程相比.

有没有办法让我这样做?我只使用本机c代码.

编辑:从这个帖子看起来像android的线程是一些轻量级的进程和修改优先级为他们setpriority应该使用.它看起来功能正常(前后的getpriority表示优先级被修改).但是,我的应用没有看到预期的效果.

解决方法

Android线程是Linux线程.没什么特别的.

setpriority()改变线程的“nice”值,这会影响线程被调度的优先级.

pthread_setschedparam()也可用于更改策略.

一般而言,如果没有提升的权限(CAP_SYS_NICE),您不能提高优先级或更改其策略.您可以降低它,或将其提高回“正常”优先级.

如果您使用adb shell ps -t -p,您可以看到分配给每个线程的优先级.此信息也包含在Dalvik堆栈中.

Dalvik使用setpriority()临时提高GC线程的优先级,以避免优先级反转.如果你看第625行周围的this bit of code,你可以看到它.您还可以看到set_sched_policy()的调用,这是一个更改线程所在的cgroup的Android库函数.

猜你在找的C&C++相关文章