2009-07-24 97 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