我想更改Android上实时音频线程的优先级。如果我设置TThread.Priority为除0以外的任何值,则会出现异常:
EThread:线程错误:参数无效”
如何正确设置线程优先级?
在POSIX系统(如Android)上,有一个TThread.Policy属性指定线程的调度策略,该策略又控制该线程的TThread.Priority行为。很可能,您要为分配的值Priority在current中没有意义Policy。例如,a Policyof SCHED_OTHER(默认)仅支持a Priorityof 0,而a Policyof SCHED_FIFO或SCHED_RR支持Priority1-99代替(某些POSIX系统甚至可能将其限制为32)。
因此,您必须先确保将Policy设置为所需的策略,然后才能Priority根据需要进行更改。但是请注意,某些Policy值(例如SCHED_FIFO和SCHED_RR)需要root / admin权限才能更改其调度Priority。
这些信息都没有在Embarcadero DocWiki上记录,甚至没有该TThread.Policy财产的存在。我看了看TThread源代码,并发现它是使用POSIX pthread_getschedparam()和pthread_setschedparam()函数来获取/设置线程的Policy和Priority值。然后,我查看了这些功能的在线参考,例如this。因此,在您的情况下,pthread_setschedparam()此错误失败:
EINVAL policy is not a recognized policy, or param does not make sense for the policy.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |