如何在 Delphi 10.3 和 Linux64 编译器中为 TThread 策略和优先级设置正确的值

How to set proper values for TThread Policy and Priority in Delphi 10.3 and Linux64 Compiler

在我的 Delphi Linux 应用程序中,我喜欢将线程优先级设置为 "tpTimeCritical"。不幸的是,优先级值无法更改。每个值 <> 0 都会引发运行时错误 217。

我发现必须先在 Linux 更改政策(SCHED_FIFO 或 SCHED_RR)。在 sched.h 中,我有以下值:

#define SCHED_NORMAL    0
#define SCHED_FIFO      1
#define SCHED_RR        2
#define SCHED_BATCH     3
#define SCHED_IDLE      5
#define SCHED_DEADLINE  6

正确设置策略后,应将优先级设置为 1 到 99 之间的值。不幸的是,这不起作用。

constructor TMyThread.Create;
begin
   inherited Create(True);

   Policy   := 1;
   Priority := 90;
end;

在我向 Embarcadero (RSP-26280) 查询后,结果证明是相应 Linux 线程实现中的错误。该错误已于 2020 年 6 月修复,并包含在下一个正式版本(我认为是 10.4)中。