2017-08-30 58 views
0
#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); 
    } 
} 

输出:
开始时间:1962年,结束时间:19247
RunningTime:0秒如何获得使用时钟运行时间()函数

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

+3

您无法“计算”CLOCKS_PER_SEC。这是一个给定的。如果执行时间少于一秒,您应该确定要输出的内容。 –

+2

顺便说一下,'clock'的语义在Windows上是非标准的,所以如果你想要便携式的结果你不应该使用这个函数。 –

+0

你读过[时间(7)](http://man7.org/linux/man-pages/man7/time.7.html)吗?对于Linux你应该! –

回答

1

(我专注于Linux的)

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

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

在一些廉价的系统(嵌入式Linux系统尤其是32位的),应注意的Y2038 problem

我可以计算CLOCKS_PER_SEC 1000在Windows?

CLOCKS_PER_SEC在语义上是一个常量,您无法更改(即使在Windows上)。它由系统提供(并且POSIX上的要求为1000000,所以在Linux上clock()给出了处理CPU的μs)。请参阅sysconf(3)_SC_CLK_TCK(与times(2)相关)。

4

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

例如

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