#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吗?
答案 0 :(得分:4)
问题是endTime
,startTime
和CLOCKS_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)相关)。