关于timer的一个问题
下面的代码怎么总也没有相等的时候
其中
timer1.interval:=1000;
times设为下一分钟的某秒,如'20:16:17'
procedure TForm1.Timer1Timer(Sender: TObject);
var
t1,t2: TTime;
begin
t1 := StrToTime(leftStr(times,8));
t2 := time;
if t2 <> t1 then exit;
Application.MessageBox('时间到了!','提醒');
BtnStart.Enabled := True;
end;
[解决办法]
procedure TForm1.tmr1Timer(Sender: TObject);
var
t1, t2: TTime;
begin
t1 := StrToTime(leftStr(times, 8));
t2 := time;
if t2 <= t1 then
exit;
Application.MessageBox('时间到了!', '提醒');
end;
[解决办法]
可能那个相等的瞬间被其他的代码消耗了……
[解决办法]
这是因为time()取的时间精确到毫秒,你只拿精确到秒的时间和它比较,刚好相等的概率是很低的。
可以写一个精确到秒的时间比较:
function SameTimeSec(const A, B: TDateTime): boolean;
begin
result := ABS(Frac(A) - Frac(B)) < OneSecond;
end;