6 Haziran 2009 Arşivi

49.7 gün sonra GetTickCount !

// 6 Haziran 2009 // 3 Yorum » // Delphi, İşletim Sistemi, Programlama, Win32

Eğer sizlerde projelerinizde zamansal kontroller kullanıyorsanız, iki kod sürecinin arasındaki zaman dilimini hesaplıyorsanız muhtemelen GetTickCount API’sini kullanıyorsunuz demektir. Bu API, işletim sistemi açıldığı zaman sıfır(0)’a eşitlenen ve her milisaniyede bir değeri bir arttırılan işletim sistemine has bir değişkenin değerini bizlere geri verir. Win32 API Help’te tanımı aşağıdaki gibidir:

DWORD GetTickCount(VOID)

Görüldüğü üzere geri dönüş değeri DWord türünde. Delphi’de DWord, LongWord türüne eşitlenmiştir. LongWord ise 32 bit işaretsiz bir tamsayıdır. Yani bu sayının alabileceği değer aralığı; 0..4.294.967.295 dır. Bu değerlerin doğruluğunu aşağıdaki kod ile de kontrol edebilirsiniz:

var
  dw : DWord;
begin
  dw := Low(DWord);
  ShowMessage(InttoStr(dw));

  dw := High(DWord);
  ShowMessage(InttoStr(dw));
end;

Hatırlarsanız eğer, GetTickCount API’sinin her milisaniyede bir işletim sistemi içinde bir yerde bulunan bir değişkenin değerini bir arttırdığını ve bu değeri geri döndürdüğünü söylemiştik. Peki; 4.294.967.295 + 1 milisaniye sonra ne olacak ? İsterseniz bu milisaniyenin kaç güne tekabül ettiğine önce bir bakalım;

  • 4.294.967.295 ms = 4.294.967.295 ms / 1000 = 4.294.967,295 sn.
  • 4294967,295 sn = 4294967,295 sn / 60 = 71.582,78825 dk.
  • 71.582,78825 dk = 71.582,78825 dk / 60 = 1.193,04647083 saat
  • 1.193,04647083 saat = 1.193,04647083 saat / 24 = 49,71 gün
  • Gördüğünüz gibi 49.7 gün sonra GetTickCount API fonksiyonu uygulamamız için tehlike sinyalleri vermeye başlayacaktır. 49.7 günün sonunda işletim sistemindeki değişken maksimum değerine erişecek ve bir sonraki milisaniyede bu değişken otomatikman sıfırlanacaktır. Dolayısı ile yapacağımız zamansal kontroller hatalı neticeler üretecek, belkide beklemediğimiz durumlar ile karşılaşacağız.

    Peki ne yapmalıyız ? Aslında yapılabilecek şeyler sınırlı, ama ben size QueryPerformanceCounter‘a bakmanızı yada Vista işletim sistemi kullanıyorsanız GetTickCount’un 64 bit değer döndüren ve kernel32.dll içinde tanımlanmış ancak Delphi’de implemente edilmemiş GetTickCount64 fonksiyonunu kullanmanızı önerebilirim.

    49.7 gün bir bilgisayar açık kalmaz, benim programım da 49.7 gün sürekli açık kalacaksa patlarsa patlasın derseniz o zaman bu hususlara bakmayabilirsiniz tabii :)

    Saygılar, sevgiler..

    Delphi ve Google Maps API

    // 6 Haziran 2009 // 40 Yorum » // Delphi, Internet, Programlama

    google_maps Hepimizin bildiği üzere Google arama motorunun popüler haritalama hizmetidir Google Maps. Gelişen teknoloji ile iyice küçülen dünyamızı evlerinizde gözlerinizin önüne getiren faydalı bir hizmet. Hizmete girmesinden kısa bir zaman sonra popülerliğini arttıran Google Map, sunduğu API’ler ile daha da yaygınlaşacağa benzer.

    Artık hemen hemen her web sitesinde bir Google Map haritasına rastlamak mümkün. Ancak masaüstü uygulamalarda emsaline pek rastlanılmıyor henüz. Bizim makalemizin konusu ise masaüstü uygulamalarda Google Maps API’lerini kullanmak. Devasa bir hizmet kütüphanesi olma yolunda hızla ilerleyen Google Maps’in tüm özelliklerini detaylıca anlatmamız elbette mümkün değil; ancak makelemiz, Delphi’de TWebBrowser nesnesi vasıtası ile Google MAP API’lerinin kullanımını ve JavaScript – Delphi interaktif haberleşmesini anlatacak.

    Makalemizi okumakta ilerlemeden evvel, Delphi & JavaScript Kardeşliği isimli makalemizi okumanız faydalı olacaktır. Google’ın bizlere sunduğu bu harita hizmeti ile haberleşmenin temellerini “Delphi & JavaScript Kardeşliği” isimli makalemizde anlattığımız için bu kısımda haritalama hizmetini kullanacak olan JavaScript sınıf tanımını, bu sınıfın Delphi altından kullanımını ve karşılıklı etkileşimini göstereceğim.
    (more…)