【问题标题】:Function clock() in CC中的函数clock()
【发布时间】:2021-04-15 21:22:08
【问题描述】:

在研究 time.h 中的 clock() 函数时,我问自己一个问题,即编写一个简单的程序来看看它是如何工作的。运行这个程序时我很惊讶,结果显示为 0,而我的预期是 2。我错在哪里?

int main(int argc, char const *argv[]){
  int msec = 0;
  clock_t before = clock();
  sleep(2);
  clock_t difference = clock() - before;
  msec = difference * 1000 / CLOCKS_PER_SEC;
  printf("Time taken %d seconds\n",msec/1000);
}

【问题讨论】:

  • 我建议double msec = difference * 1000.0 / CLOCKS_PER_SEC; 并打印double
  • 来自man page“如果使用的处理器时间不可用或者它的值不能表示,函数返回值(clock_t) -1。”clock () 两个电话中你发生了什么,所以你有-1-(-1)=0
  • @WeatherVane 这个顺序是否比除然后乘更好?我读过某个地方,如果它们远离0..abs(1) 范围,则双精度会丢失。
  • @yvw 当我使用 MS 函数 Sleep(2000) 运行它时,它报告了 1,但在使用 double 时它报告了 1.999999。此外,clock() 的 MS 实现不符合标准,因为它测量的是挂墙时间。
  • @WeatherVane 正如你所说。计算顺序在这里有影响吗?

标签: c unix system-calls time.h


【解决方案1】:

clock 测量程序使用的处理器时间。您的程序在睡眠时不使用处理器时间。程序的其余部分使用的时间不到一毫秒。

要测量“挂钟”或“真实世界”时间,请使用time,并使用difftime 减去time_t 值,time 返回的类型:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
    time_t before = time(NULL);
    sleep(2);
    double difference = difftime(time(NULL), before);
    printf("The time taken was %g seconds.\n", difference);
}

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 2013-03-27
    • 2011-01-09
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多