读书人

关于timer的一个有关问题

发布时间: 2014-01-09 23:07:34 作者: rapoo

关于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;

读书人网 >.NET

热点推荐