寻求有关获取C程序中函数的真实,用户,系统时间的帮助。例如,读取文件需要多长时间。我一直在查看#include并使用带有-p标志的time()函数,但我正在执行此操作。我想我的问题是,如果我有:
time_t total_time;
time_t start, end;
start = time(-p, &start);
<some code>
end = time(-p, &end);
printf("real = %e, user = %S, sys = %S\n", ???????????);
我理解三次之间的差异,只是不知道获得结果的正确执行。
答案 0 :(得分:0)
检查time()的返回值:
返回的值通常表示自UTC时间1970年1月1日00:00(即当前的unix时间戳)以来的秒数。虽然库可能使用不同的时间表示:可移植程序不应直接使用此函数返回的值,但始终依赖于对标准库的其他元素的调用将它们转换为可移植类型(例如localtime,gmtime或difftime)
要显示实时,请阅读此answer。
对于用户和系统,请阅读:How to measure user/system cpu time for a piece of program?
答案 1 :(得分:0)
可以通过在之前和之后调用time()
并减去结果来确定实际经过的时间。如果你想要便携,你应该使用difftime函数来执行减法,因为time()
的返回值不能保证是一个数字。
但是,如果您使用的是POSIX兼容系统,time()
的返回值将是自纪元以来的秒数,因此您可以减去它们以获得经过的秒数。
如果您想要更高分辨率的结果,可以使用gettimeofday(),它会返回一个包含毫秒分辨率时间的timeval结构。
访问用户的最便携方式&amp;系统时间是调用clock() C库函数,但是你在@gsamaras的评论中已经注意到你的系统没有这个函数。
根据您使用的系统,您可以调用系统函数times()或getrusage()。 getrusage()
会更容易使用,因为它将值返回为timeval
结构,其中包含秒和毫秒。如果你想要实际的时间单位,times()
会返回你需要转换的时钟标记。
如果您的程序是线程化的,并且您正在使用Linux,getrusage()
提供了额外的优势:您可以获得当前线程的资源消耗。
无论您选择哪种功能,该过程都将获得初始读数,最终读数,并减去两个结果以查看您的功能消耗的时间。