Linux(および他のUnixライクなシステム)のC ++では、長い計算にかかるCPU(壁掛け時計ではない)時間を測定する必要があるため、clock()を使用しています。問題:32ビットシステムでは、これは約2000秒または4000秒後にラップアラウンドします。
このための推奨される回避策は何ですか?
getrusage
次の構造体を満たすものを使用します。
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
完了のために、struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
いつものように、詳細についてはマンページを参照してください(man getrusage
)
もう1つの可能な方法は、gettimeofday()を2回使用して、msの精度を返すことです。
によって提供される精度が必要clock()
ですか?そうでない場合は、time()
2回使用して、違いを利用できます。
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
編集: time()
litbが彼のコメントで指摘したように(CPU時間ではなく)リアルタイムを測定しますが、そうしclock()
ます。CPU時間を測定する場合は、litbのアドバイスに従って、を使用する必要がありますgetrusage()
。
定期的に時間を取得し、ロールオーバーするたびに乗数変数intをインクリメントしますか?