【问题标题】:choose between timeval and clock() to calculate elapsed time in C在 timeval 和 clock() 之间选择以计算 C 中的经过时间
【发布时间】:2013-09-14 09:06:06
【问题描述】:

我正在使用 timeval 和 clock() 函数来查看我的 c 程序中 2 个操作之间的时间差。不知何故,timeval 似乎给了我正确的经过时间(以毫秒为单位),而 clock() 给出的值非常少。

    g_time = clock();
    gettimeofday(&decode_t,NULL);

一段时间后

    delay =((float)(clock()-g_time)/(float)CLOCKS_PER_SEC);
    gettimeofday(&poll_t,NULL);
    delay1 = ((poll_t.tv_sec - decode_t.tv_sec)*1000 + (poll_t.tv_usec -  decode_t.tv_usec)/1000.0)    ;
    printf("\ndelay1: %f delay: %f ",delay1,delay);

通常的输出是:

延迟1:1577.603027 延迟:0.800000

delay1 以毫秒为单位,延迟以秒为单位。

我使用的是 64 位的 archlinux。我不明白为什么会这样。

【问题讨论】:

    标签: c linux clock timeval


    【解决方案1】:

    来自clock(3) 手册页:

    clock() 函数返回程序使用的处理器时间的近似值。

    所以clock 函数不会返回经过的时间量,而是您的程序已运行的一些“滴答声”。如您所知,在多任务系统中,您的程序可以随时暂停以让其他程序运行。

    【讨论】:

    • 感谢您的回复,但我用 CLOCKS_PER_SEC 划分刻度之间的差异,这应该给出经过的时间。同样,我使用 timeval 来计算时间差异。我可以假设使用 clock() 函数所经过的时间给出的输出正好小于程序休眠时的 (ticks/CLOCKS_PER_SEC) 的数量吗?
    • 您的程序无需休眠即可不累积处理器时间。例如,在双核系统上,如果系统中尝试运行的进程总数超过两个,则每个进程都会定期挂起以允许另一个进程运行。
    • @GauravKumar 这里重要的是“处理器时间”,即您的进程实际运行的时间。如果您的进程被抢占(每秒可能多次)运行其他进程,则该时间不计算在内。 clock 函数可以测量程序的运行时间,但不能测量实际的实时时间。
    • @JoachimPileborg 非常感谢。我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多