Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C/C++;?_C++_C_Multithreading_Time_Getrusage - Fatal编程技术网

C++ 如何在C/C++;?

C++ 如何在C/C++;?,c++,c,multithreading,time,getrusage,C++,C,Multithreading,Time,Getrusage,我试图得到一个特定线程到目前为止在编程上花费的总时间 getrusage返回线程的CPU时间,但我需要总时间,即包括线程因任何原因被阻塞所花费的时间 请注意,我将通过使用我编写的探查器检测给定程序来利用此功能 一个程序可能有很多线程(我主要关注分析服务器,所以可能有很多线程)。在任何给定的时间,我都想知道一个特定的线程花费了多少时间(到目前为止)。因此,在生成线程时为每个线程启动计时器并不方便。因此,我需要一些类似于getrusage的用法,例如,它返回当前线程的总时间,或者我可以向它传递一个线

我试图得到一个特定线程到目前为止在编程上花费的总时间

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

请注意,我将通过使用我编写的探查器检测给定程序来利用此功能

一个程序可能有很多线程(我主要关注分析服务器,所以可能有很多线程)。在任何给定的时间,我都想知道一个特定的线程花费了多少时间(到目前为止)。因此,在生成线程时为每个线程启动计时器并不方便。因此,我需要一些类似于
getrusage
的用法,例如,它返回当前线程的总时间,或者我可以向它传递一个线程id。因此,手动机制,如在生成线程时获取时间戳,然后再获取它们之间的差异,对我来说没有多大帮助

有人能建议怎么做吗


谢谢

保存线程启动时的当前时间。线程花费的总时间(包括运行时间和阻塞时间)仅为:

current_time - start_time

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

根据您想要使用它的目的,可以考虑的一种可能性是将阻塞期间消耗的时钟滴答数相加,这通常足够慢,并隐藏一点类似的开销。因此,根据这个总和和您所测量的线程间隔,您可以计算线程在该间隔内的实时负载。当然,与其他进程进行时间切片会减少一些时间,根据您的情况,捕获所有阻塞可能非常容易,也可能非常困难。

您可以使用
chrono::stable\u clock
来测量自线程启动以来经过的总时间。可以尝试
clock\u gettime(clock\u thread\u CPUTIME\u ID,…) Boost是C++的jQuery。标准库应该足以满足所有要求,但每个人都喜欢黑魔法。听起来你想知道线程在上下文中花费了多长时间,不管是否被阻塞。也许你想看看strace的源代码,看看它是怎么知道的。@paddy终于有人找到我了哈哈。是的,这就是我想要的。你能详细说明一下strace吗?那不是我想要的。@DanishAlsayed从你所写的判断,这正是你想要的,所以你需要用不同的方式来描述你想要的。不,我们想理解你的问题,这在目前的状态下是相当困难的。“总时间,即包括线程因任何原因被阻塞所花费的时间”的唯一合理解释是“挂钟时间”,但您明确拒绝挂钟时间,并且不提供任何其他解释;我拒绝了拿两个时间戳,然后计算它们的差值的想法。我要求一个API/现有库可以返回这个时间值,或者一个库可以返回线程创建时的时间,然后我可以从当前时间戳中减去它。