2

Linux(および他のUnixライクなシステム)のC ++では、長い計算にかかるCPU(壁掛け時計ではない)時間を測定する必要があるため、clock()を使用しています。問題:32ビットシステムでは、これは約2000秒または4000秒後にラップアラウンドします。

このための推奨される回避策は何ですか?

4

4 に答える 4

12

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

于 2009-03-08T18:33:10.497 に答える
1

もう1つの可能な方法は、gettimeofday()を2回使用して、msの精度を返すことです。

于 2009-03-08T21:26:55.587 に答える
1

によって提供される精度が必要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()

于 2009-03-08T18:24:06.150 に答える
-1

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

于 2009-03-08T18:25:25.040 に答える