Нужен ли 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