我在我的軟件中使用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