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

您需要提供的精度clock()吗?如果没有,您可以使用time()两次并取差:

time_t start, end;
double diff;

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

编辑: time()测量实时(不是 CPU 时间),正如 litb 在他的评论中指出的那样,但clock(). 如果你想测量 CPU 时间,你应该遵循 litb 的建议并使用getrusage().

于 2009-03-08T18:24:06.150 回答
1

另一种可能的方法是使用 gettimeofday() 两次,因为它返回毫秒精度。

于 2009-03-08T21:26:55.587 回答
-1

定期获取时间并在每次翻转时增加一个乘数变量 int?

于 2009-03-08T18:25:25.040 回答