我正在为我的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
Run Code Online (Sandbox Code Playgroud)
我希望输出大约3秒,但是显示错误。如您所见,如果我使用Linux命令时间运行该程序,我将得到正确的时间,我想使用我的c程序显示相同的时间。
与流行的看法相反,该clock()函数检索 CPU 时间,而不是经过的时钟时间,因为名称令人困惑可能会让人相信。
这是来自 C 标准的语言:
7.27.2.1
clock函数概要
Run Code Online (Sandbox Code Playgroud)#include <time.h> clock_t clock(void);描述
该
clock函数确定使用的处理器时间。退货
该
clock函数返回实现对程序使用的处理器时间的最佳近似值,自一个实现定义的时代开始,仅与程序调用相关。要确定以秒为单位的时间,应将时钟函数返回的值除以宏的值CLOCKS_PER_SEC。如果使用的处理器时间不可用,则该函数返回值(clock_t)(?1)。如果无法表示该值,则该函数返回一个未指定的值。
要检索经过的时间,您应该使用以下方法之一:
time()分辨率为 1 秒的函数timespec_get()功能可能更精确,但可能并非在所有系统上都可用gettimeofday()linux系统上可用的系统调用clock_gettime()功能。请参阅UNIX 中的挂钟时间、用户 CPU 时间和系统 CPU 时间具体是什么?有关此主题的更多信息。
这是使用的修改版本gettimeoday():
#include <time.h>
clock_t clock(void);
Run Code Online (Sandbox Code Playgroud)
输出:
time 程序执行时间为 3.005133 秒