【问题标题】:Getting the real, user, sys time of functions within a program获取程序中函数的真实、用户、系统时间
【发布时间】:2016-09-22 23:24:58
【问题描述】:

寻求帮助以获取我的 C 程序中函数的真实、用户、系统时间。例如读取文件需要多长时间。我一直在查看#include 并将 time() 函数与 -p 标志一起使用,但我正在努力执行此操作。我想我的问题是我是否有:

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", ???????????);

我了解这三个时间的区别,只是不知道正确执行得到结果。

【问题讨论】:

  • 你的问题与real-time无关。不要乱加标签,也不要滥用标准术语。

标签: c function time timing


【解决方案1】:

查看time()的返回值:

返回的值通常表示自 UTC 时间 1970 年 1 月 1 日 00:00 开始的秒数(即当前的 unix 时间戳)。尽管库可能使用不同的时间表示:可移植程序不应直接使用此函数返回的值,而是始终依赖对标准库其他元素的调用将它们转换为可移植类型(例如 localtime、gmtime 或 difftime) .

要显示实时时间,请阅读answer

对于用户和系统,请阅读:How to measure user/system cpu time for a piece of program?

【讨论】:

  • 我已经阅读了这些帖子以及更多内容,包括 time() 的 linux 手册页。我了解它的作用,以及每个值代表什么。我在实施它时遇到问题。我不能使用clock(),因为我必须在一台非常旧的机器上运行这段代码,而且它不喜欢clock() 函数。非常感谢您的意见。
  • 不客气@LD50,我赞成你的问题,希望得到关注!等待看看是否会发布另一个答案。如果不是,请考虑接受我的回答。
【解决方案2】:

实际经过的时间可以通过前后调用time()并减去结果来确定。如果你想便携,你应该使用difftime函数来执行减法,因为time()的返回值不能保证是一个数字。

但是,如果您使用的是 POSIX 兼容系统,time() 的返回值将是自纪元以来的秒数,因此您只需减去它们即可得到经过的秒数。

如果您想要更高分辨率的结果,可以使用gettimeofday(),它返回一个包含毫秒分辨率时间的timeval 结构。

访问用户和系统时间的最便携方法是调用clock() C 库函数,但是您在 cmets 中向@gsamaras 指出您的系统没有此函数。

根据您使用的系统,您可以调用系统函数times()getrusage()getrusage() 会更容易使用,因为它将值作为 timeval 结构返回,其中包含秒和毫秒。 times() 返回时钟刻度,如果你想要实际的时间单位,你必须转换它。

如果您的程序是线程化的,并且您使用的是 Linux,getrusage() 提供了一个额外的优势:您可以获得当前线程的资源消耗。

无论您选择哪个函数,该过程都会获得初始读数、最终读数,然后将这两个结果相减以查看您的函数所消耗的时间。

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多