2009-03-08 15 views
2

Linux(およびその他のUnix系システム)のC++では、長い計算時間を要するCPU(ウォールクロックではない)時間を計測する必要があるため、clock() 。問題:32ビットシステムでは、これは約2000または4000秒後にラップアラウンドします。32ビットLinuxクロック()オーバーフロー

これにはどのような回避策がありますか?

答えて

12

は、次の構造体を埋めるgetrusageを使用したいですgettimeofday()を2回使用すると、ms精度が返されます。

1

clock()の精度が必要ですか?ない場合は、time()を二回使用し、その差を取ることができます。

time_t start, end; 
double diff; 

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

EDIT:litbとしてtime()対策リアルタイム(ないCPU時間が)彼のコメントで指摘したが、そうclock()を行います。 CPU時間を測定する場合は、litbのアドバイスに従って、getrusage()を使用してください。

+0

時間は壁時計の時間ではありませんか?つまり、プログラムのCPU使用量が少ない場合は少なくなりません。 –

+0

それは正しいですが、それもそうですclock() –

+0

誰もあなたを修正するように見えません、私はもう一度やります:時計は壁時計の時刻ではありません。 「プログラムが使用したプロセッサ時間の近似値」を返します。 –

-1

繰り返し単位で時間を取得し、ロールオーバーするたびに乗数変数intをインクリメントしますか? (man getrusage

1

別の詳細については、manページを、いつものように

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

相談:完了するために

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

struct timeval

関連する問題