我在我的软件中使用TTimer,它应该永远24/7运行。我的软件中没有任何地方是该计时器禁用或停止运行。它的主要功能是更新表格的值。一旦软件运行就开始运行,从那时起,TTimer不应停止。然而,在运行了一个多月之后,TTimer神秘地停止了运行。该软件在Windows 7上运行,该软件是在Delphi 2010 XE上开发的。我搜索了我的代码,看看可能是什么原因造成的,但我无法弄清楚。TTimer本身停止
Timer1.Enabled:=true;
这就是计时器的启动方式。
更新: 经过一番调查后,我发现TTimer从未停止过,但还有另一个问题。我在TForm上的TStringGrid表只是不显示任何正在更新的值。此外,我还发现,我用来存储数据项目列表的TList列表正在以某种方式销毁列表变空。但是,只有在程序启动时加载列表中的数据项才会被删除。
每次我更新窗体上的TStringGrid时,我都会运行从0到count-1位置的TList项目。因此,如果内存中没有TList中的项目,我的代码只是在显示部分上跳过 ,因此在TStringGrid上没有任何更新。
喜欢的东西:
If (List.count>0) then
begin
//Display values in TStringGrid;
end;
不过,虽然软件仍然在运行,我能够从一个文件 重装我的产品清单回从TList名单,我的软件开始工作像它应该。
我讨厌说最丑陋的程序员最讨厌的词。恐怕我可能有内存泄漏。任何人都这么想?
任何帮助将不胜感激。谢谢。
你怎么知道,如果OnTimer事件不再被解雇?我建议你在OnTimer事件的第一行记录一个条目,运行它直到它停止工作所需的时间,并检查它是否完全没有被触发。在OnTimer事件被触发后,我发现你的代码很可能失败了。 – jachguate 2011-03-10 00:13:32
@jachguate:我相信我真正的问题是内存泄漏。你有什么建议吗。 – ThN 2011-03-11 14:01:43
@ user639464您可以先在开发环境中运行应用程序一段时间,然后启动fastMM leak detection,但这是另一个问题(可能已经在此解答) – jachguate 2011-03-11 16:32:50