【问题描述】
该问题是由于 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;
【严重程度】
高
【更新级别】
建议
【特别感谢】
永不言弃