我想知道我是否可以计算每个线程的运行时间。 我使用pthread在C++中实现多线程程序。我们知道,每个线程都会与CPU竞争。 我可以使用clock()函数来计算每个线程消耗的CPU时钟的实际数量吗?C++线程运行时间
我的程序是这样的:
Class Thread()
{
Start();
Run();
Computing();
};
的start()是启动多个线程。然后每个线程都会运行计算功能来做一些事情。我的问题是我如何计算每个线程的运行时间以用于计算功能
我想知道我是否可以计算每个线程的运行时间。 我使用pthread在C++中实现多线程程序。我们知道,每个线程都会与CPU竞争。 我可以使用clock()函数来计算每个线程消耗的CPU时钟的实际数量吗?C++线程运行时间
我的程序是这样的:
Class Thread()
{
Start();
Run();
Computing();
};
的start()是启动多个线程。然后每个线程都会运行计算功能来做一些事情。我的问题是我如何计算每个线程的运行时间以用于计算功能
你在使用什么平台?如果您使用的是Linux,并在内核> 2.6.26可以使用RUSAGE_THREAD
标志getrusage
:
struct rusage usage
getrusage(RUSAGE_THREAD, &usage);
内struct rusage
,你会发现ru_utime
和ru_stime
分别跟踪用户时间和系统时间。在开始时调用一次,然后一次,你可以得到三角洲。
GNU libc中的足够新版本和Linux内核支持下列时钟: CLOCK_REALTIME 全系统实时时钟。设置这个时钟需要适当的权限。
CLOCK_MONOTONIC 无法设置的时钟,表示从某个未指定起点开始的单调时间。
CLOCK_PROCESS_CPUTIME_ID 来自CPU的高分辨率每进程计时器。
CLOCK_THREAD_CPUTIME_ID 线程特定的CPU时钟。
所以你可能有CLOCK_THREAD_CPUTIME_ID试一试。
您是否需要在程序中始终进行此测量并使用测量的数字?或者这是为了调试目的? 如果对其进行调试,许多工具都可以帮助您解决问题。让我们知道您正在编码的平台以及您使用的IDE,并且我们可能会提供帮助:-) – Fuzz 2010-04-29 05:00:09
没错。如果你所要问的原因是你想找出需要改变的地方,以便尽量减少总体执行时间,那么在SO上找到了很好的答案。 – 2010-04-29 12:25:57