Нужен ли KillTimer?

Я использую SetTimer API и вижу много кода, подобного этому:

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

Нужно ли звонить в KillTimer или система автоматически освободит ресурсы при выходе из процесса? Приводит ли забывание вызова KillTimer к утечкам ресурсов?

Я понимаю, что если таймер не нужен, он может быть уничтожен KillTimer. Но ДОЛЖЕН ли он быть уничтожен вручную?

3 ответа

Решение

Таймеры, установленные из HWND, неявно уничтожаются разрушаемым окном (hwnd). Так что нет, вам не нужно чистить таймеры при выходе из окна.

Но хорошей практикой является очистка всех ресурсов, связанных с окном, при закрытии окна.

Таймер будет автоматически уничтожен Windows при выходе из процесса.

Но имейте в виду, что (так кажется) ваш таймер принадлежит окну, а не процессу. Поэтому, если ваше приложение позволяет создавать и уничтожать эти окна в процессе, у вас будут утечки таймеров.

Это всегда хорошая практика, чтобы очистить вещи явно, потому что в противном случае отсутствие очистки может вернуться, чтобы укусить вас позже.

Согласно 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

Другие вопросы по тегам