【问题标题】:Getting an unexpected answer from this clock() function in C从 C 中的这个 clock() 函数得到一个意想不到的答案
【发布时间】:2012-03-28 13:18:42
【问题描述】:
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.288640991s 之类的东西(从上面的当前代码中不确定右边是否有那么多数字。但我期待几秒钟:

float time = ((float)time2 - (float)time1) / 1000000.0F;

当我除以 10000.0F 时,我得到 28 秒的实时时间,这就是实际情况。那么为什么上面的行不这样做呢?

编辑:我使用的是 Mac,听说有问题。

【问题讨论】:

  • 你应该用定义的常量CLOCKS_PER_SEC除。
  • 使用CLOCKS_PER_SEC而不是硬编码的1000000.0F

标签: c time clock


【解决方案1】:

首先,您应该使用CLOCKS_PER_SEC,而不是某个幻数。

无论如何,如果您在 POSIX 系统中,CLOCKS_PER_SEC 在 POSIX 中被定义为一百万(与您使用的值相同),所以这可能不是您的问题。

您必须知道clock 仅测量处理器运行您的用户空间程序的时间,而不是在内核或其他进程中花费的时间。这很重要,因为如果您调用系统调用或调用系统调用的函数,或者如果您的进程被内核抢占,clock 结果在您看来可能是错误的。

例如看这个:

 time_t time1, time2;

 time1 = clock();
 sleep(5);
 time2 = clock();

clock 调用前后clock 返回值的差异(用CLOCKS_PER_SEC 正确归一化)sleep 调用可能是0 秒。

如果您想测量函数或代码块执行过程中经过的时间,您最好使用函数gettimeofday

【讨论】:

    【解决方案2】:

    clock() 返回程序启动后经过的时钟滴答数。

    为了把它变成秒,你必须除以CLOCKS_PER_SEC,而不是1000000.0F


    无耻的自我推销:

    您也可以使用我的stopwatch.hstopwatch.c 来测量经过的时间。

    【讨论】:

    • 没有。仍然得到这个:0.284750s
    • @Chucky:那么你的实现就坏了。
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2019-04-21
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多