【问题描述】
该问题是由于 TQRepeatJobs.DoTimeCompare 函数的问题没有考虑到算术溢出问题造成的,原来的比较代码如下:
1 2 3 4 |
function TQRepeatJobs.DoTimeCompare(P1, P2: Pointer): Integer; begin Result := PQJob(P1).NextTime - PQJob(P2).NextTime; end; |
此时,如果两个时间差超出了整数的表示范围(两个作业的时间差>214748364.7ms,约等于约59.65小时)就会得到错误的结果。
新版本修正了这一问题:
1 2 3 4 5 6 7 8 9 10 11 12 |
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; |
【严重程度】
高
【更新级别】
建议
【特别感谢】
永不言弃
0 条评论
沙发空缺中,还不快抢~