Нужен ли KillTimer? - PullRequest
       42

Нужен ли KillTimer?

7 голосов
/ 24 июля 2009

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 28 июля 2009

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

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

3 голосов
/ 24 июля 2009

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

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

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

0 голосов
/ 13 мая 2015

Согласно MSDN, нужно убить таймеры:

Приложения должны использовать функцию KillTimer для уничтожения таймеров, которые больше не нужны. В следующем примере уничтожаются таймеры, определенные константами IDT_TIMER1, IDT_TIMER2 и IDT_TIMER3.

// Уничтожение таймеров.
KillTimer (hwnd, IDT_TIMER1);
KillTimer (hwnd, IDT_T);1008 * KillTimer (hwnd, IDT_TIMER3);

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

...