C ile Zaman İşlemleri

Yazan : Şadi Evren ŞEKER

C dilinde mevcut zamanı almak ve işlemek mümkündür. Bunun için time.h dosyasının içerisinde bulunan fonksiyonlar kullanılabilir. Ayrıca time.h dosyasında bulunan time_t oluşumu (struct) zaman tutmak için geliştirilmiştir ve zamanı oluşturan alt unsurları da içerir.

Örneğin şu andaki zamanı ekrana basmak için aşağıdaki kod kullanılabilir:

  struct timeval tv;
  time_t curtime;
  gettimeofday(&tv, NULL);
  curtime=tv.tv_sec;
  printf("%m-%d-%Y  %T.",localtime(&curtime));

Örneğin bir kullanıcıdan yazı okuyan ve ne kadar zamanda okuduğunu ekrana basan kod aşağıdaki şekilde yazılabilir:

#include <stdio.h>
#include <time.h>
#include <conio.h>
int main ()
{
  time_t start,end;
  time (&start);
  printf ("Bir tuşa basınız");
  getch();
  time (&end);
  printf ("Tuşa basmanız %.2lfsaniye sürdü.\n", difftime (end,start));
  return 0;
}

Yukarıdaki time_t yapısı oldukça kullanışlı olmasına karşılık mikro saniye gibi düşük zamanları algılamakta yetersizdir. Bunun için biraz daha detaylı çalışan timeeval yapısından ve gettimeofday fonksiyonundan faydalanılabilir:

struct timeval starttv, endtv;
struct timezone starttz, endtz;gettimeofday(&starttv, &starttz);
for (i=0;i<100;i++)
   for(j=0;j<256;j++)
      for(k=0;k<10;k++)
         printf("deneme") ;
gettimeofday(&endtv, &endtz);
float fark1=getdiff(endtv, starttv);

Örneğin yukarıdaki kodda iç içe 3 döngü içerisinde ekrana deneme yazdırılıyor (toplam 100x256x10 tane) bu işlemin aldığı vakti ölçmek için gettimeofday fonksiyonundan faydalanılmış ve en sonunda da fark hesaplanmış. Burada eksik olan getdiff fonksiyonu aşağıdaki şekilde yazılabilir:

float getdiff(struct timeval endtv, struct timeval starttv)
{
   float diff=0;
   diff=(endtv.tv_sec-starttv.tv_sec)*1000000+
   (endtv.tv_usec-starttv.tv_usec);
   return diff;
}

Serper Bey’in sorusu üzerine ekliyorum, büyültmek için resme tıklayabilirsiniz:

Dev-CPP üzerinde zaman işlemleri

Yukarıdaki, linux kodlarından farklı olarak Dev-CPP kullanmak isteyenler clock sınıfından yararlanabilir.

Kod basitçe zamanı clock() fonksiyonu ile okur ve dört işleme tabi tutar. Buradaki değişken tipi ise clock_t cinsindendir.

clock_t start, end;

start=clock();

…. işlemler ……

end = clock();

printf(“fark: %f”,end-start);

şeklinde yazılan kod başarılı bir şekilde çalışma süresini ölçer. Elbette bu işlemler sırasında sys/time.h kütüphanesi include edilmelidir.

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


804 views

5 responses to “C ile Zaman İşlemleri”
  1. Sarper gencler says:

    Ben dev C++ kullanıyorum.yukarıdaki kodları yazdıgım zaman cogu fonksiyonu derleyici tanımıyor.gettimeofday vs.Nettede gcc derleyicisi var ama linux işletim sistemi icin diyor.time.h dan tut sys/time.h gibi kutuphaneleri eklesemde nafile bi turlu yapamadım.Yazdıgım programın nekadar vakitte tamamlandıgını hesaplamak istiyorum.Yukarıdaki kodları nasıl calıstırabilirim yardım edermisiniz :(

  2. Şadi Evren ŞEKER says:

    Yukarıdaki kod, dev-cpp ile çalışmakta. Konu içerisine dev-c++ ekran görüntüsünü koyuyorum. Koda tek yaptığım eklenti getch() fonksiyonunu çağırmak (bu çalıştıktan sonra ekranın kapanmadan beklemesi için yapılan bir eklenti) bunun dışında tamamen kod aynıdır ve çalışmaktadır.

    Belki aldığınız hataları yazarsanız daha çok yardımcı olabilirim.

    başarılar

  3. Sarper gencler says:

    #include
    #include
    #include // veya sadece time.h

    float getdiff(struct timeval endtv, struct timeval starttv)
    {
    float diff=0;
    diff=(endtv.tv_sec-starttv.tv_sec)*1000000+
    (endtv.tv_usec-starttv.tv_usec);
    return diff;
    }

    int main() {

    struct timeval starttv, endtv;
    struct timezone starttz,endtz;
    gettimeofday(&starttv, &starttz);
    for (int i=0;i<100;i++)
    for(int j=0;j<256;j++)
    for(int k=0;k<10;k++)
    printf("deneme") ;
    gettimeofday(&endtv, &endtz);
    float fark1=getdiff(endtv, starttv);
    getch();
    return 0;
    }
    18)aggregate `timezone starttz' has incomplete type and cannot be defined

    18)aggregate `timezone endtz' has incomplete type and cannot be defined
    19)`gettimeofday' undeclared (first use this function)

    Bahsettiginiz kod calisiyor fakat yukarıdaki kod calısmıyor hatalarını yazdım 18 ve 19.satırlarda

  4. Şadi Evren ŞEKER says:

    Probleminizi anladım. Kısaca, dev-cpp ile linux kodlarını çalıştıramazsınız. Ancak dev-cpp içerisinde desteklenen clock sınıfı işinize yarar. Bu sınıfı kullanan bir örnek kodu, yukarıdaki yazıya ekliyorum. Çözüm olarak ya yukarıdaki gibi bir kodu dev-c++ ile kodlayın veya linux kodlarını çalıştırabileceğiniz bir ortama (örneğin cygwin) geçin.

    Başarılar

  5. malik says:

    biz bi proje ile uğraşıyoruz da .. devre kapıları ile ilgili birşey.giriş kapıları otomatik değiğşecek mikrosaniyede ya da saniyede . 1 ise 0 ;0 ise 1 olacak
    bunun için nasıl bi yol izleyebiliriz.Biz şimdilik saniyeyi sayaca atmayı düşünüyoruz ama
    pek de bilgimiz olduğu söylenemez.Yardımınızı bekleriz şimdiden teşekkürler..

Leave a Reply


+ 6 = dokuz

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'C ile Zaman İşlemleri' isimli yazı 01 Jan 2009 tarihinde, saat: 21:41 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam804 defa okunmuştur.

Benzer yazıları C/C++, işletim sistemleri, Programlama Dilleri, Sistem Programlama (System Programming) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: C/C++, işletim sistemleri, Programlama Dilleri, Sistem Programlama (System Programming)
Tags: , , ,