2009-03-08 29 views
2

Linux'ta (ve diğer Unix benzeri sistemlerde) C++'da, uzun bir hesaplamayla alınan CPU (duvar saati değil) süresini ölçmem gerekiyor, bu yüzden saat kullanıyorum() . Sorun: 32 bit sistemlerde, bu yaklaşık 2000 veya 4000 saniye sonra etrafa sarılır.32 bit Linux saati() taşması

Bunun için önerilen çözüm nedir?

cevap

12

Aşağıdaki yapı doldurur getrusage kullanmak istiyorum olası yöntem gettimeofday() iki kez ms doğruluğunu döndürürken kullanmaktır.

1

clock() tarafından sağlanan hassaslığa ihtiyacınız var mı? Değilse, time() iki kez kullanmak ve farkı alabilir:

time_t start, end; 
double diff; 

time(&start); 
// Do your stuff... 
time(&end); 
diff = difftime(end, start); 

DÜZENLEME: LITB olaraktime() ölçümler, gerçek zamanlı (değil CPU süresi) yaptığı açıklamada belirttiği, ama çok clock() yapar. CPU süresini ölçmek isterseniz, litb'in tavsiyelerini takip etmeli ve getrusage()'u kullanmalısınız.

+0

duvar saati zamanını ölçmek için zaman değil midir? Programınız daha az işlemci kullanıyorsa, daha az olmayacaktır. 1970'den itibaren gerçek saniyeyi ölçüyor. –

+0

bu doğru, ama saat() –

+0

da hiç kimse sizi düzeltmiyor gibi görünüyor, yine yapacağım: saat duvar saati değil. "program tarafından kullanılan işlemci süresinin bir yakınlaştırmasını" döndürür. –

-1

Zamanı düzenli olarak alın ve her devir sırasında bir çarpan değişkeni int değerini artırın. (man getrusage)

1

başka detaylar için manpage, her zaman olduğu gibi

struct timeval { 
    time_t  tv_sec;  /* seconds */ 
    suseconds_t tv_usec; /* microseconds */ 
}; 

başvurunuz: tamamlanma için

struct rusage { 
    struct timeval ru_utime; /* user time used */ 
    struct timeval ru_stime; /* system time used */ 
    ... 
}; 

, struct timeval:

İlgili konular