在c / c中更改Android上的本机线程优先级
疯狂地晦涩的pthread api线程优先级不仅是陌生的不可理解,而且它只是在
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)); 输出:
另外,无论我做什么,pthread_setschedparam总是为我返回一个错误(参数无效). 有没有办法让我这样做?我只使用本机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库函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |