Süre
Önceki XXI. Oylum - Tarih ve Zaman Sonraki
Süre
Süreyi göstermenin tek yolu basit bir aritmetik veri türünü kullanmaktır. Aşağıdaki işlev iki mutlak zaman arasındaki süreyi hesaplar. Bu işlev time.h başlık dosyasında tanımlanmıştır.
double difftime
(time_t zaman1,
 time_t zaman0)
işlev
difftime işlevi zaman1 ve time zaman0 mutlak zamanları arasındaki süreyi double türünde saniye cinsinden bir değer olarak hesaplar. Artık süre desteği etkinleştirilmedikçe farkın artık süresi yoksayılır.
GNU sisteminde, time_t değerleri arasında basitçe bir çıkarma işlemi yapabilirsiniz. Fakat diğer sistemlerde time_t başka bir kodlamaya karşılık olabileceğinden doğrudan çıkarma işlemi ile doğru sonuç alınamayabilir.
GNU C kütüphanesinde özellikle süreyi ifade edebilen iki veri türü vardır. Bunlar çeşitli kütüphane işlevlerince kullanılmıştır ve siz de amaçlarınıza uygun olarak bunları kullanabilirsiniz. İkisi de aslında aynı olmakla birlikte biri saniye cinsinden bir çözünürlük içinken diğeri nanosaniye cinsinden bir çözünürlük içindir.
struct timeval
veri türü
struct timeval yapısı süreyi göstermekte kullanılır. sys/time.h başlık dosyasında bildirilmiş olan yapı şu üyelere sahiptir:
long int tv_sec
Sürenin tam saniyelerden oluşan kısmını içerir (ondalık ayracın solundaki kısım).
long int tv_usec
Sürenin saniyeden küçük kısmını (ondalık ayracın sağındaki kısım) mikrosaniye cinsinden içerir. Daima bir milyondan küçüktür.
struct timespec
veri türü
struct timespec yapısı süreyi göstermekte kullanılır. time.h başlık dosyasında bildirilmiş olan yapı şu üyelere sahiptir:
long int tv_sec
Sürenin tam saniyelerden oluşan kısmını içerir (ondalık ayracın solundaki kısım).
long int tv_nsec
Sürenin saniyeden küçük kısmını (ondalık ayracın sağındaki kısım) nanosaniye cinsinden içerir. Daima bir milyardan küçüktür.
Çoğunlukla struct timeval veya struct timespec türündeki iki değeri birbirinden çıkarmak gerekir. Burada en iyi yol budur. tv_sec üyesinin veri türünün işaretsiz veri türlerinden biri olduğu kendine özgü işletim sistemlerinde bile bu çalışır.
/* `struct timeval' değerleri olan X ve Y arasında çıkarma yap
    ve sonucu RESULT içinde sakla.
    Fark negatifse 1 ile değilse 0 ile dön.  */

int
timeval_subtract (result, x, y)
      struct timeval *result, *x, *y;
{
  /* Elde 1 diyelim. */
  if (x->tv_usec < y->tv_usec) {
    int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
    y->tv_usec -= 1000000 * nsec;
    y->tv_sec += nsec;
  }
  if (x->tv_usec - y->tv_usec > 1000000) {
    int nsec = (x->tv_usec - y->tv_usec) / 1000000;
    y->tv_usec += 1000000 * nsec;
    y->tv_sec -= nsec;
  }

  /* Şimdi hesaplayalım. tv_usec kesinlikle pozitif. */
  result->tv_sec = x->tv_sec - y->tv_sec;
  result->tv_usec = x->tv_usec - y->tv_usec;

  /* Sonuç negatifse 1 dönsün. */
  return x->tv_sec < y->tv_sec;
}
struct timeval kullanan işlevler gettimeofday ve settimeofday işlevleridir.
Doğrudan özellikle sürelerle çalışan hiçbir GNU C kütüphanesi işlevi olmamakla birlikte, mutlak zaman, işlemci süresi, alarm ve uyku ile ilgili işlevler sürelerle ilgili birşeyler yaparlar.
Önceki Üst Ana Başlık Sonraki
Zaman Kavramları Başlangıç İşlemci Zamanı ve İşlemci Süresi
Bir Linux Kitaplığı Sayfası