Ağustos 30

Lazarus böyle ol canımı ye #2 (FpTimer)

Timer bileşenini hepiniz bilirsiniz. Ontimer olayına yazdığınız kodu interval değişkenine girdiğiniz sıklıkta çalıştırır. Yani interval’a 100 değerini girdiyseniz 100ms’de bir (saniyede 10 kez) içerisine yazdığınız kodu çağırır.  Son uygulamamda şöyle bir durum vardı. Interval’ı 1 olan 10 adet timer ayrıca intervalı 50ms. olan bir timer daha gerekdi ve hepsi çalıştığında aslında (beklediğim bir sıkıntıda olsa … ) interval’a girdiğiniz değerlerden çok daha seyrek çalışdığını ve sistemi çok yoğruduğunu halilende işime yaramadığını gördüm. Çözüm aslında belliydi thread kullanmam gerekiyordu ama pascal benim için hem timer kolaylığını kullanan hemde thread olarak çalışan bir timer geliştirmiş. Körün istediği bir gözdü Allah verdi iki göz 🙂

FpTimer Thread olarak çalışıyor. Intervalını girip çalışmasını istediğiniz prosedürü işaret olarak belirtiyorsunuz ve gerisini o sizin için hallediyor.

Deneme için bir edit kutusu ve buton koyalım ve edit kutusunun içerisine 1 yazalım.

uses kısmına fptimer ekleyelim.

Ontimer olayımız aşağıdaki gibi;

procedure TForm1.FTimerTimer(Sender:Tobject);
begin
edit1.text:=inttostr(strtoint(edit1.text)+1);
end;

Buton’un onclick olayısa aşağıdaki gibi

procedure TForm1.Button1Click(Sender: TObject);
var
  FTimer:TFPTimer;
begin

   FTimer := TFPTimer.Create(nil);
   FTimer.OnTimer      := @FTimerTimer;
   FTimer.Interval     := 500;  // in milliseconds
   FTimer.Enabled      := False;
   Ftimer.StartTimer;
end;

Burada bir timer oluşturuyoruz. Interval’ı 500ms ve olay olarak FTimerTimer’ı işaret ediyor. Burada farklı olan butona her basışınızda yeni bir timer oluşacak ve sayı daha hızlı artacak ama performansda herhangi bir değişiklik olmayacak 🙂

 

 

 

Did you like this? Share it:

Etiketler:, , ,

Posted 30 Ağustos 2016 by admin in category Lazarus, Pascal, Programlama

2 thoughts on “Lazarus böyle ol canımı ye #2 (FpTimer)

  1. Soner

    Merhaba, sitenizde güzel şeyler yazmışsiniz tebrik ederim. Yalnız burada
    TFPTimer.Create(nil);
    Nil yerine self yada application yazın sonra memoryleak olur.

    Reply

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*