2010-04-29 116 views
0

我想知道我是否可以计算每个线程的运行时间。 我使用pthread在C++中实现多线程程序。我们知道,每个线程都会与CPU竞争。 我可以使用clock()函数来计算每个线程消耗的CPU时钟的实际数量吗?C++线程运行时间

我的程序是这样的:

Class Thread() 
{ 
Start(); 
Run(); 
Computing(); 
}; 

的start()是启动多个线程。然后每个线程都会运行计算功能来做一些事情。我的问题是我如何计算每个线程的运行时间以用于计算功能

+0

您是否需要在程序中始终进行此测量并使用测量的数字?或者这是为了调试目的? 如果对其进行调试,许多工具都可以帮助您解决问题。让我们知道您正在编码的平台以及您使用的IDE,并且我们可能会提供帮助:-) – Fuzz 2010-04-29 05:00:09

+0

没错。如果你所要问的原因是你想找出需要改变的地方,以便尽量减少总体执行时间,那么在SO上找到了很好的答案。 – 2010-04-29 12:25:57

回答

2

不,您不能使用clock。处理器可以切换到StartComputing调用之间的另一个线程,以便计算几个线程的时间。您需要为一个线程使用局部滴答计数器。

+0

你的意思是时钟会包含所有线程的运行时间吗?如果是这样,我想要使用每个线程的本地计数器计数器。你能否为滴答柜台提供更多解释? – chnet 2010-04-29 05:03:29

+0

是关于“时钟”。但是线程本地计数器是一个平台特定的功能,您使用的是什么平台? – 2010-04-29 05:05:25

+0

i686-apple-darwin9-g ++ - 4.0.1 – chnet 2010-04-29 05:06:34

1

你在使用什么平台?如果您使用的是Linux,并在内核> 2.6.26可以使用RUSAGE_THREAD标志getrusage

struct rusage usage 
getrusage(RUSAGE_THREAD, &usage); 

struct rusage,你会发现ru_utimeru_stime分别跟踪用户时间和系统时间。在开始时调用一次,然后一次,你可以得到三角洲。

1

根据clock_gettime(3)

GNU libc中的足够新版本和Linux内核支持下列时钟: CLOCK_REALTIME 全系统实时时钟。设置这个时钟需要适当的权限。

CLOCK_MONOTONIC 无法设置的时钟,表示从某个未指定起点开始的单调时间。

CLOCK_PROCESS_CPUTIME_ID 来自CPU的高分辨率每进程计时器。

CLOCK_THREAD_CPUTIME_ID 线程特定的CPU时钟。

所以你可能有CLOCK_THREAD_CPUTIME_ID试一试。