对 C++ 中的函数进行计时在Linux上运行的程序
我正在尝试使用在用户空间中执行所需的时间来对 C++ 程序的函数进行计时。我在程序内部尝试了clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) 命令,但恐怕这是CPU时间,而不是我实际需要的用户时间。在这种情况下,时间“程序名称”将不起作用,因为我只是对一个函数进行计时。任何帮助都会很棒。 谢谢!
I am trying to time a function of my C++ program using the amount of time that it takes to execute in user space. I tried the clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) command from inside the program but I am afraid that this is the CPU time and not the User Time that I actually need. The time "program name" will not work in this case because I am only timing a function. Any help would be great.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(3)
您可以使用 gettimeofday() 作为示例 这里。
将此函数添加到您的代码中:
#include <sys/time.h>
long myclock()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (tv.tv_sec * 1000000) + tv.tv_usec;
}
并使用它来检索时间:
long start = myclock();
// do something
// ...
long end = myclock() - start;
std::cout << "[" << time->tm_hour << ":"<< time->tm_min << ":" << time->tm_sec <<
"] time:" << std::setprecision(3) << end/1000000.0 << std::endl;
尝试 boost:timer 库。它便于携带且易于使用。 Boost 计时器分别为您提供挂钟时间、用户时间和系统时间。
http://www.boost.org/doc/libs /1_53_0/libs/timer/doc/cpu_timers.html
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用
times()
函数,参见:http://linux.die .net/man/2/times这将为您提供进程的当前用户和系统时间。您可以在子例程进入和退出时调用它,然后进行减法。
您还可以使用 gprof 等分析器,它会自动为您完成这一切(但会产生开销)。
Use the
times()
function, see: http://linux.die.net/man/2/timesThis will give you current user and system time for your process. You can call it on entry and exit from your subroutine, and subtract.
You can also use a profiler like gprof, which will do this all automatically for you (but will incur overhead).