首页 > 解决方案 > 用于捕获线程 CPU 时间的 API

问题描述

我想测量 CPU 时间,而不是线程上的经过时间。例如,如果一个线程正在等待或休眠,它不应该计入 CPU 时间,因为该线程不处于可运行状态。所以我得到了以下链接来获取 CPU 时间。但是,它似乎是根据我下面的测试来捕获经过的时间(我希望 cpu_time_used 应该接近 0,但实际上是 2)。我错过了什么?

https://www.gnu.org/software/libc/manual/html_node/CPU-Time.html

#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
std::this_thread::sleep_for (std::chrono::seconds(2));
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

标签: c++linuxc-libraries

解决方案


请注意,clock() 以核心时间为单位进行测量,即CLOCKS_PER_SEC clock()滴答表示一个处理器上一秒的计算,因此它表示进程在所有线程上使用的时间量。因此,如果在睡眠期间有另一个线程在运行,它仍然会增加时钟计数 - 如果总共有两个线程,时钟计数将指示 2 秒已经过去,如您所示。如果睡眠线程是唯一的线程,您将获得少量时间,例如 @NateEldredge 报告。在 Linux 上,您可以查询或设置一个计时器CLOCK_THREAD_CPUTIME_ID,就像@KamilCuk 说的那样。


推荐阅读