如何在 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)中。
在我的 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)中。