此问题在此处已有答案:
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
秒吗?
1条答案
按热度按时间svdrlsy41#
clock()
函数并不测量运行时间,它测量的是CPU时间,系统调用占用了进程47微秒的CPU时间,包括clock()
函数的开销,虽然有点长,但这似乎是合理的。在兼容系统上使用POSIX函数
gettimeofday()
进行精确的挂钟测量,或使用<time.h>
中定义的timespec_get()
(如果可用)(C11及更高版本)。