【发布时间】:2017-03-06 11:36:17
【问题描述】:
我正在尝试以编程方式获取特定线程到目前为止所花费的总时间。
getrusage 返回线程的 CPU 时间,但我想要 total 时间,即包括线程因任何原因被阻塞所花费的时间。
请注意,我将通过使用我编写的分析器检测给定程序来利用此功能。
一个程序可能有很多线程(我专注于分析服务器,所以可以有很多)。在任何给定时间,我都想知道特定线程花费了多少时间(到目前为止)。因此,在每个线程产生时为每个线程启动一个计时器并不方便。所以我想要一些类似于getrusage 的用法,例如它返回当前线程的总时间,或者我可以将线程 ID 传递给它。因此,手动机制(例如在生成线程时获取时间戳,然后再获取它们的差异)对我来说不是很有帮助。
谁能建议如何做到这一点?
谢谢!
【问题讨论】:
-
您可以使用
chrono::steady_clock来衡量自您的话题开始以来经过的总时间。 -
或许可以试试
clock_gettime(CLOCK_THREAD_CPUTIME_ID, ...); -
Boost 是 c++ 的 jquery。标准库应该足以应付一切,但每个人都喜欢黑魔法。
-
听起来你想知道线程在上下文中花费了多长时间,无论是否被阻塞。也许你想看看 strace 的源代码,看看它是怎么知道的。
-
@paddy 终于有人抓到我了哈哈。是的,这就是我想要的。你能详细说明一下 strace 吗?
标签: c++ c multithreading time getrusage