int main (int argc, const char * argv[]) {
clock_t time1, time2;
time1 = clock();
//time1 = gettimeofday();
add();
time2 = clock();
//time2= gettimeofday();
float time = ((float)time2 - (float)time1) / 1000000.0F;
printf("%fs\n", time);
return 0;
}
我最终从这里获得了0.288640991这样的东西(不确定它是否是右边的那么多数字,从上面的当前代码开始。但是我期待这一行的几秒钟:
float time = ((float)time2 - (float)time1) / 1000000.0F;
当我除以10000.0F时,我得到28秒实时,这实际上是它。那么为什么上面那行不是这样做的呢?
编辑:我正在使用Mac,我听说这是有问题的。答案 0 :(得分:1)
首先你应该使用CLOCKS_PER_SEC
而不是一些幻数。
无论如何,如果你在POSIX系统中,CLOCKS_PER_SEC
被定义为POSIX中的一百万(你正在使用的值相同),所以这可能不是你的问题。
您必须知道clock
仅测量处理器运行您的用户空间程序的时间,而不测量内核或其他进程中花费的时间。这很重要,因为如果您调用系统调用或调用系统调用的函数,或者您的进程被内核抢占,那么clock
结果可能会出错。
例如见:
time_t time1, time2;
time1 = clock();
sleep(5);
time2 = clock();
clock
之前和之后CLOCKS_PER_SEC
返回值的差异(使用sleep
正确标准化)gettimeofday
调用可能为0秒。
如果要测量执行函数或代码块期间的经过时间,最好使用函数{{1}}。
答案 1 :(得分:0)
clock()
返回自程序启动以来经过的时钟周期数。
为了将其转换为秒,您必须除以CLOCKS_PER_SEC
,而不是1000000.0F
。
无耻的自我推销:
或者,您可以使用我的stopwatch.h和stopwatch.c来衡量已用时间。