C语言 以下代码未输出执行它所需的正确时间[重复]

nbnkbykc  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(96)

此问题在此处已有答案

Does clock measure sleep i.e. suspended threads?(1个答案)
昨天关门了。
我希望下面的代码输出执行代码所花费的时间大约为5秒。

#include <stdio.h>
#include <time.h>
#include <unistd.h>
 
int main() {
    clock_t start, end;

    /* Store start time here */
    start = clock();
    
    /* Do 5 seconds of work */
    sleep(5);

    /* program logic ends here */
    end = clock();

    printf("start: %f\n", (double)start);
    printf("end: %f\n", (double)end);
    
    /* Get the time taken by program to execute in seconds */
    double duration = ((double)end - start)/CLOCKS_PER_SEC;
     
    printf("duration: %f, CPS: %li\n", duration, CLOCKS_PER_SEC);

    printf("Time taken to execute in seconds : %f\n", duration);
    return 0;
}

但我得到了以下输出:

start: 1097.000000
end: 1144.000000
duration: 0.000047, CPS: 1000000
Time taken to execute in seconds : 0.000047

有人能解释一下为什么Time taken to execute in seconds不是5秒吗?

svdrlsy4

svdrlsy41#

clock()函数并不测量运行时间,它测量的是CPU时间,系统调用占用了进程47微秒的CPU时间,包括clock()函数的开销,虽然有点长,但这似乎是合理的。
在兼容系统上使用POSIX函数gettimeofday()进行精确的挂钟测量,或使用<time.h>中定义的timespec_get()(如果可用)(C11及更高版本)。

相关问题