2011-12-04 10 views
5

Возможно, это дубликат вопроса для Is KillTimer necessary?, но я хотел бы подтвердить это с помощью достоверного источника.Действительно ли KillTimer нужен?

Действительно ли разрушает окно, освобождающее ресурсы, выделяемые ОС для таймера? (DestroyWindowsTimers действительно вызываются, не говоря уже о том, действительно ли такая функция существует? Если да, то где?)

ответ

6

Нет, это не обязательно. Из документации DestroyWindow (с добавлением акцент):

Функция посылает WM_DESTROY и WM_NCDESTROY сообщения к окну, чтобы отключить его и удалить фокус клавиатуры из него. Функция также разрушает меню окна, сбрасывает очередь сообщений потока, уничтожает таймеры, удаляет владельца буфера обмена и разбивает цепочку зрителя буфера обмена (если окно находится в верхней части сети зрителя).

2

Выполнение поиска в google - единственная актуальная реальная ссылка на него - это какой-то исходный код Win2k. URL-адрес закончился /Censorship/win2k_sources/private/.../timers.c, я предполагаю от source code leak некоторое время назад. Я не смотрел код, и не буду размещать ссылку здесь.

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

Я не вижу нигде в документации, в которой говорится, что вам не нужно звонить KillTimer, чтобы избавиться от таймера. Поэтому, основываясь на документированном контракте, вам необходимо позвонить KillTimer. На практике Windows, вероятно, очистит его для вас, но поскольку это недокументированное поведение, вы должны написать свой код, чтобы следить за документированным поведением и вызывать KillTimer на всех ваших таймерах.

Смежные вопросы