KillTimer是否必要?

时间:2009-07-24 11:27:05

标签: windows winapi timer resource-leak

我使用SetTimer API,我看到很多这样的代码:

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

我是否必须致电KillTimer,否则系统会在流程退出时自动释放资源?忘记拨打KillTimer会导致资源泄漏吗?

据我所知,如果不需要计时器,它可以被KillTimer破坏。但必须手动销毁吗?

3 个答案:

答案 0 :(得分:8)

从HWND设置的定时器被窗口(hwnd)被破坏隐式销毁。所以不,你不必在窗口退出时清理你的计时器。

但是,在窗口关闭时清除与窗口相关的所有资源是一种很好的做法。

答案 1 :(得分:3)

Windows会在进程退出时自动销毁计时器。

但请记住(所以看来)你的计时器属于窗口,而不是进程。因此,如果您的应用程序允许在一个过程中创建和销毁这些窗口,那么您将会泄漏定时器。

明确地清理事物总是好的做法,因为否则缺乏清理可能会在以后再次引起你的反击。

答案 2 :(得分:0)

根据MSDN,人们应该杀掉计时器:

  

应用程序应该使用KillTimer函数来销毁那些计时器   不再需要了。以下示例销毁计时器   由常量IDT_TIMER1,IDT_TIMER2和IDT_TIMER3标识。

     

//摧毁计时器   KillTimer(hwnd,IDT_TIMER1);
  KillTimer(hwnd,IDT_TIMER2);
  KillTimer(hwnd,IDT_TIMER3);

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644901(v=vs.85).aspx#creating_timer