2011-12-04 20 views
5

Questa potrebbe sembrare una domanda doppia per Is KillTimer necessary?, ma vorrei confermarla con la fonte credibile .KillTimer è davvero necessario?

La finestra di distruzione realmente libera la risorsa allocata dal sistema operativo per il timer? (lo standard DestroyWindowsTimers viene effettivamente chiamato anche se tale funzione esiste effettivamente? se sì, dove?)

risposta

6

No, non è necessario. Dalla documentazione di DestroyWindow (con enfasi aggiunta):

La funzione invia WM_DESTROY e WM_NCDESTROY messaggi alla finestra per disattivare e rimuovere lo stato attivo da esso. La funzione distrugge anche il menu della finestra, svuota la coda messaggi thread, distrugge i timer, rimuove la proprietà degli Appunti e interrompe la catena di visualizzazione degli appunti (se la finestra si trova nella parte superiore della catena di visualizzazione).

2

Facendo una ricerca su google, l'unico riferimento reale a quello che sembrava essere un codice sorgente Win2k. L'URL è terminato con /Censorship/win2k_sources/private/.../timers.c, sto assumendo dal source code leak qualche tempo fa. Non ho guardato il codice, né posterò un link qui.

Questa funzione esiste molto probabilmente - qualcosa del genere deve esistere per i timer collegati alle maniglie delle finestre - poiché il messaggio del timer viene consegnato a un handle di finestra specifico.

Non riesco a vedere da nessuna parte nella documentazione che afferma che non è necessario chiamare KillTimer per eliminare un timer. Quindi, in base al contratto documentato, è necessario chiamare KillTimer. In pratica, Windows probabilmente lo ripulirà per te, ma dal momento che è un comportamento non documentato dovresti scrivere il tuo codice per seguire il comportamento documentato e chiamare KillTimer su tutti i tuoi timer.