我想更改Android上实时音频线程的优先级。
如果我将TThread.Priority
设置为除0之外的任何值,我会得到一个例外:
EThread:线程错误:参数无效"
如何正确设置线程优先级?
答案 0 :(得分:5)
在POSIX系统(如Android)上,有一个TThread.Policy
属性,用于指定线程的调度策略,该策略反过来控制TThread.Priority
属性的行为方式。最有可能的是,您尝试为Priority
指定的值在当前Policy
内没有意义。例如,Policy
SCHED_OTHER
(默认值)仅支持Priority
0,而Policy
支持SCHED_FIFO
或SCHED_RR
取而代之的是Priority
1-99(某些POSIX系统甚至可能将它们限制为32)。
因此,您必须先确保将Policy
设置为所需的策略,然后根据需要更改Priority
。但请注意,某些Policy
值(例如SCHED_FIFO
和SCHED_RR
)需要root / admin权限才能更改其{1}}。
Embarcadero DocWiki上没有记录这些信息,甚至没有Priority
属性的记录。我查看了TThread.Policy
源代码,发现它正在使用POSIX TThread
和pthread_getschedparam()
函数来获取/设置线程的pthread_setschedparam()
和Policy
值。然后,我查看了这些功能的在线参考资料,例如this one。因此,在您的情况下,Priority
失败并出现此错误:
pthread_setschedparam()