如何使用clock()函数获取运行时间

时间:2017-08-30 08:12:03

标签: c

#include <stdio.h>
#include <time.h>
int main()
{
  time_t startTime, endTime;
  while(1)
  {
    startTime = clock();
    /*
       Some processing
    */
    endTime = clock();
    gap = (int)((endTime - startTime) / (CLOCKS_PER_SEC));
    printf("StartTime: %d, EndTime: %d\n", (int)startTime, (int)endTime);
    printf("RunningTime: %d sec", gap);
  }
}

输出:
StartTime:1962,EndTime:19247
RunningTime:0秒

我发现这是因为在Ubuntu上CLOCKS_PER_SEC为1,000,000 我可以像在Windows中一样计算CLOCKS_PER_SEC为1000吗?

2 个答案:

答案 0 :(得分:4)

问题是endTimestartTimeCLOCKS_PER_SEC都是整数。您需要将至少一个值转换为浮点类型。 使用浮点类型作为目的地。

E.g。

double gap = (double) (endTime - startTime) / CLOCKS_PER_SEC;
printf("RunningTime: %f sec", gap);

答案 1 :(得分:1)

(我专注于Linux)

先阅读time(7)。然后阅读clock_gettime(2)getrusage(2)times(2)clock(3)(注释很重要)。

有几种不同的时间概念:实际,经过时间,进程CPU,线程CPU。你需要选择正确的。请注意,某些函数以秒和微秒或纳秒(使用一些spatial)返回时间。您可能希望将它们转换为struct(有时会失去精度)。请注意,实际挂钟时间可能会以某种意外(非单调)的方式改变(例如adjtimex(2) ...)。

在一些廉价系统(特别是32位嵌入式Linux系统)上,请注意Y2038 problem

  

我可以像在Windows中一样计算CLOCKS_PER_SEC为1000吗?

double在语义上是一个你不能改变的常量(即使在Windows上)。它由系统提供(并且在POSIX上必需为1000000,因此在Linux CLOCKS_PER_SEC上提供进程CPUμs)。另请参阅clock() _SC_CLK_TCK(与sysconf(3)相关)。