从C中的clock()函数获得意外答案

时间:2012-03-28 13:18:42

标签: c time clock

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,我听说这是有问题的。

2 个答案:

答案 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.hstopwatch.c来衡量已用时间。