我正在为我的c程序使用时钟功能来打印当前程序的执行时间。我在输出中得到的时间是错误的。我想以秒,毫秒和微秒为单位显示时间。
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main()
{
clock_t start = clock();
sleep(3);
clock_t end = clock();
double time_taken = (double)(end - start)/CLOCKS_PER_SEC; // in seconds
printf("time program took %f seconds to execute \n", time_taken);
return 0;
}
time ./time
time program took 0.081000 seconds to execute
real 0m3.002s
user 0m0.000s
sys 0m0.002s
我希望输出大约3秒钟,但是显示错误。 如您所见如果我使用Linux命令时间运行该程序,我得到的时间是正确的,我想使用我的c程序显示相同的时间。
答案 0 :(得分:3)
与流行的看法相反,clock()
函数检索CPU时间,而不是经过的时钟时间,因为名称混乱可能会使人们相信。
这是C标准中的语言:
7.27.2.1
clock
函数简介
#include <time.h> clock_t clock(void);
说明
clock
函数确定使用的处理器时间。返回
clock
函数返回自实现所定义的仅与程序调用相关的时代开始以来,实现对程序所用处理器时间的最佳近似值。要确定以秒为单位的时间,应将时钟函数返回的值除以宏CLOCKS_PER_SEC
的值。如果没有可用的处理器时间,则该函数返回值(clock_t)(−1)
。如果无法表示该值,则该函数返回未指定的值。
要获取经过的时间,应使用以下之一:
time()
函数,分辨率为1秒timespec_get()
函数可能更精确,但可能并非在所有系统上都可用gettimeofday()
系统调用clock_gettime()
函数。有关此主题的更多信息,请参见What specifically are wall-clock-time, user-cpu-time, and system-cpu-time in UNIX?。
以下是使用gettimeoday()
的修改版本:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
int main() {
struct timeval start, end;
gettimeofday(&start, NULL);
sleep(3);
gettimeofday(&end, NULL);
double time_taken = end.tv_sec + end.tv_usec / 1e6 -
start.tv_sec - start.tv_usec / 1e6; // in seconds
printf("time program took %f seconds to execute\n", time_taken);
return 0;
}
输出:
time program took 3.005133 seconds to execute