5,284
社区成员




...
try
timer1.enabled:=false;
......
finally
timer1.enabled:=true;
end;
简易代码如上,执行一段时间 后(5-10天),这个定时器就失效了,不在执行了?
求各位大神赐教,感激不尽!!!
很多定器,我也是 try finally end,没有出现过你的这种情况;一般 try Tthread finally end.用线程execute,稳定些,如果需要显示就 如:
Procedure TthreadA.Execute;
begin
FreeOnTerminate := true;
Synchronize(
procedure
begin
Form1.Caption := 'Updated in thread via an anonymous method'
end
)
end
语法中使用finally ,只是保证了出现异常时能正确执行finally 后的内容,例如释放内存等。
所以,你的代码里最好是有except的方式去捕捉异常,并完成容错处理。
还有,建议使用线程来代替定时器的方式。
如果“其他事件”是异步触发的,比如在其他线程中触发的,是可以中断timer事件的。如果是消息触发的,通常不会,因为windows的消息机制是同步的,一条消息没有处理完之前不会处理下一条消息。但是也有例外,如果在消息处理代码中又(直接或者间接)调用了GetMessage或者PeekMessage,比如调用Application.ProcessMessages,则会打断当前消息处理,转去处理其他消息。
刚发现 ,有其他事件被 触发了,也就是在执行timer事件时,又有其它事件被 触发了,这样 会不会中断timer事件呢,从而导致timer.enabled没有被true,最后timer定时器失效了 ,会不会这样?
正常情况下不会出现这个问题
你可以改为用线程的while做循环,不需要用timer了。