【发布时间】:2011-03-09 22:07:32
【问题描述】:
我在我的软件中使用 TTimer,它应该 24/7 全天候运行。在我的软件中,计时器没有被禁用或停止运行。它的主要功能是更新表的值。它在软件运行后立即启动,从那时起 TTimer 不应停止。然而,在运行了一个多月后,那个 TTimer 神秘地停止了运行。该软件在Windows 7上运行,软件在Delphi 2010 XE上开发。我已经搜索了我的代码以查看可能导致它的原因,但我无法弄清楚是什么原因。
Timer1.Enabled:=true;
这就是计时器的启动方式。
更新: 经过一番调查,我发现 TTimer 从未停止过,但还有另一个问题。我在 TForm 上的 TStringGrid 表根本不显示任何正在更新的值。此外,我还发现我用来存储数据项列表的 TList 列表正在以某种方式被破坏,导致列表变为空。但是列表中的数据项只有在程序启动时才被加载,并不会在代码中的任何地方被删除。
每次我更新表单上的 TStringGrid 时,我都会遍历我的 TList 项目从 0 到 count-1 位置。因此,如果内存中的 TList 中没有项目,我的代码就会跳过 在显示部分上,因此 TStringGrid 上没有任何更新。
类似:
If (List.count>0) then
begin
//Display values in TStringGrid;
end;
但是当软件仍在运行时,我能够从文件中重新加载我的项目列表 回到 TList 列表,我的软件开始按预期工作。
我不想说程序员最讨厌的最丑陋的词。恐怕我可能有内存泄漏。有人这么认为吗?
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
如何知道 OnTimer 事件是否不再触发?我建议您在 OnTimer 事件的第一行记录一个条目,运行它所需的时间,直到它停止工作并检查它是否根本没有被触发。我发现在 OnTimer 事件触发后您自己的代码很可能会失败。
-
@jachguate:我相信我真正的问题是内存泄漏。你对此有什么建议吗?
-
@user639464 您可以先在开发环境中运行应用程序一段时间并激活 fastMM 泄漏检测,但这是另一个问题(可能已经在这里回答了)