2009-07-24 94 views
6

我使用的SetTimer API,我看到了很多這樣的代碼:KillTimer是否必要?

case WM_DESTROY: 
    // Destroy the timer. 
    KillTimer(hwnd, IDT_TIMER); 
    PostQuitMessage(0); 
    break; 

我必須呼籲進程退出KillTimer函數或系統將自動免費資源?忘記調用KillTimer會導致資源泄漏?

我明白,如果不需要定時器,它可以被KillTimer破壞。但必須手動銷燬?

+0

我做了一些研究,發現:Wnen一個窗口被銷燬清理程序被調用(從xxxFreeWindow調用DestroyWindowsTimers)。 – 2009-08-03 08:18:51

回答

7

由HWNDs設置的定時器被銷燬的窗口(hwnd)隱式銷燬。所以不,你不必在窗口退出時清理你的計時器。

但這是一個很好的做法,可以在窗口關閉時清理與窗口相關的所有資源。

4

計時器將在進程退出時由Windows自動銷燬。

但請記住,(看來)你的計時器屬於窗口,而不是過程。因此,如果您的應用程序允許在一個流程中創建和銷燬這些窗口,您將泄漏定時器。

明確地清理東西總是很好的做法,否則缺少清理可能會在以後回來咬你。

+0

我不認爲說窗口被銷燬時定時器會泄漏是不正確的。也許在舊的Windows 95/98天,計時器可能會泄漏。但絕對在XP和更高版本中,在窗口被破壞時,在hwnds上設置的定時器會被清除。 – selbie 2009-07-28 08:16:08

+2

@selbie:是的,我相信你是對的。但我仍然認爲,假設事情會泄漏,除非你明確地清理它們,這是很好的做法。想象一下,你從基於窗口的定時器改變爲基於回調的定時器 - 然後你將有泄漏,除非你明確地殺死它們。 – RichieHindle 2009-07-28 20:09:11