質問

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

他のヒント

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()を使用する必要があります。

別の可能な方法は、ms精度を返すため、gettimeofday()を2回使用することです。

定期的に時間を取得し、ロールオーバーするたびに乗数変数intをインクリメントしますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top