如何在C / C ++中找到线程使用的总时间?

时间:2017-03-06 11:36:18

标签: c++ c multithreading time getrusage

我试图以编程方式获取特定线程到目前为止花费的总时间。

getrusage返回线程的CPU时间,但我想要时间,即包括线程因任何原因被阻塞所花费的时间。

请注意,我将使用我编写的分析器来检测给定程序,从而利用此功能。

一个程序可能有很多线程(我专注于分析服务器,所以可能有很多)。在任何给定的时间我都想知道特定线程花了多少时间(到目前为止)。因此,生成每个线程的计时器都不方便。所以我希望使用与getrusage类似的用法,例如它返回当前线程的总时间,或者我可以传递给它一个线程ID。所以手动机制,比如在线程产生时采用时间戳,然后再采用它们的差异,对我来说不是很有帮助。

有人可以建议怎么做吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

将当前时间保存在线程启动时。线程花费的总时间(计算运行时间和阻塞时间)就是:

current_time - start_time

当然,这几乎总是无用/无意义,这就是没有专用API的原因。

答案 1 :(得分:0)

根据您想要使用的内容,可以考虑的一种方法是将阻塞期间消耗的时钟滴答数加起来,这通常足够慢,可以隐藏一点这样的开销。因此,根据该总和以及您还测量的周围线程间隔,您可以计算该间隔内线程上的实时负载。当然,使用其他进程进行时间切片可以减少一些数量,并且捕获所有阻塞可能非常容易或非常困难,具体取决于您的情况。