KillTimer ve Null Hwnd


Bu yazının güncel adresi http://blog.hasanmanzak.com/killtimer-ve-null-hwnd/ olarak değişmiştir.

3 Responses to KillTimer ve Null Hwnd

  1. Ahmet Yeşilçimen says:

    Hasan Ağbi, Ben tam anlamadım biraz tuhaf hakkaten konuyu didikler misin ? lütfen :)

    • Hasan MANZAK says:

      :)) Konunun tüm detayları apayrı makaleler olur :) Kısaca şöyle anlatayım:

      Yüksek seviyeli dillerin IDE’lerinde Timer nesneleri vardır ya hani, bileşen olarak. Interval belirlersin, onTimer metoduna kodunu yazarsın, her Interval süre sonra onTimer daki kodlar koşulur. Timer nesnesinin kaynak kodlarını incelersen Timer.Enable(d:=True;) (ya da atıyorum Activate) gibi metodlarda/property setlemerlinde aslında işletim sisteminin SetTimer Api’sini çağırıyorsun, Interval ve onTimer bilgilerini senin müdehale ettiğin parametre olarak geçerek. Disable ya da Deactivate gibi metodlarda da KillTimer Api’si çağrılıyor. SetTimer çağrımı sonucunda sen o anki thread içerisine bir O.S.Timer eklemiş oluyorsun, KillTimer ile de thread içerisindeki ID si verilen O.S.Timer’ı öldürüyorsun. Kaynak blog gönderisi de bununla ilgili bir konuyu ele alıyor. Timer ı ilişkilendirdiğin Pencere Tutacağını (Window Handle, senin ilgili Form nesnen mesela) sistemden yok ettiğin zaman pencere yöneticisi otomatik olarak ilişkili tüm Timer’ları yok ediyor. O anki WindowHandle ın Null a setleniyor doğal olarak, pencereyi yok ettin çünkü. Hemen ardından da o handle ı kullanarak KillTimer çağırdığında threadin içindeki, başka pencerelerle ilşkilendirilmemiş Timer’ların varsa onlardan birini yok etme ihtimalin var, TimerID tutarsa yok edersin :) İşte kaynak gönderi bu problemi ele alıyor. Dikkatlice tekrar bir oku benim bu gönderimi ve yorumumu, daha net anlayacaksın. Ve şiddetle tavsiye ediyorum, TTimer nesnesinin kaynak kodlarını incele ;)

  2. Ahmet Yeşilçimen says:

    Hmm simdi daha iyi anladım. inceleyeceğim bende çoğu şeyi Delphinin LIB karıştırarak öğrendim bu yüzden ihaml etmiyeceğim. teşekkür ederim :)

Yorum bırakın