QWorker 更新 – 修正了重复作业间隔很长时,比较时由于算术溢出造成的问题

【问题描述】

该问题是由于 TQRepeatJobs.DoTimeCompare 函数的问题没有考虑到算术溢出问题造成的,原来的比较代码如下:

function TQRepeatJobs.DoTimeCompare(P1, P2: Pointer): Integer;
begin
Result := PQJob(P1).NextTime - PQJob(P2).NextTime;
end;

此时,如果两个时间差超出了整数的表示范围(两个作业的时间差>214748364.7ms,约等于约59.65小时)就会得到错误的结果。

新版本修正了这一问题:

function TQRepeatJobs.DoTimeCompare(P1, P2: Pointer): Integer;
var
  ATemp: Int64;
begin
ATemp := PQJob(P1).NextTime - PQJob(P2).NextTime;
if ATemp < 0 then
  Result := -1
else if ATemp > 0 then
  Result := 1
else
  Result := 0;
end;

 【严重程度】

【更新级别】

建议

【特别感谢】

永不言弃

分享到: