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.

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
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
#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
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