在Android上设置线程优先级

时间:2014-06-02 20:45:05

标签: android delphi

我想更改Android上实时音频线程的优先级。 如果我将TThread.Priority设置为除0之外的任何值,我会得到一个例外:

  

EThread:线程错误:参数无效"

如何正确设置线程优先级?

1 个答案:

答案 0 :(得分:5)

在POSIX系统(如Android)上,有一个TThread.Policy属性,用于指定线程的调度策略,该策略反过来控制TThread.Priority属性的行为方式。最有可能的是,您尝试为Priority指定的值在当前Policy内没有意义。例如,Policy SCHED_OTHER(默认值)仅支持Priority 0,而Policy支持SCHED_FIFOSCHED_RR取而代之的是Priority 1-99(某些POSIX系统甚至可能将它们限制为32)。

因此,您必须先确保将Policy设置为所需的策略,然后根据需要更改Priority。但请注意,某些Policy值(例如SCHED_FIFOSCHED_RR)需要root / admin权限才能更改其{1}}。

Embarcadero DocWiki上没有记录这些信息,甚至没有Priority属性的记录。我查看了TThread.Policy源代码,发现它正在使用POSIX TThreadpthread_getschedparam()函数来获取/设置线程的pthread_setschedparam()Policy值。然后,我查看了这些功能的在线参考资料,例如this one。因此,在您的情况下,Priority失败并出现此错误:

pthread_setschedparam()