c++ - CPU 时间始终为零 :(

标签 c++ c time cpu

我正在尝试使用以下代码测量 CPU 时间。

timespec time1, time2, temp_time;

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
 int i;
 int cpu_sum = 0;


 for (i = 0; i < nelements; i++) {

  cpu_sum += array[i];

 }    
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
temp_time.tv_sec = time2.tv_sec - time1.tv_sec;
printf( sum: %d using CPU in %lf ms \n",cpu_sum, temp_time.tv_sec);

但我总是得到 0.000 毫秒的时间 知道这里出了什么问题。

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

  1. 您通过将错误的参数类型传递给 printf(time_t,可能是 long,而不是double).

  2. tv_sec 只包含时间的整个秒部分。您还需要使用 tv_nsec 来获取纳秒部分。

尝试这样的事情:

temp_time.tv_sec = time2.tv_sec - time1.tv_sec;
temp_time.tv_nsec = time2.tv_nsec - time2.tv_nsec;
if (temp_time.tv_nsec < 0) {
    temp_time.tv_nsec += 1000000000;
    temp_time.tv_sec--;
}
printf("%lld.%.9ld\n", (long long)temp_time.tv_sec, (long)temp_time.tv_nsec);

关于c++ - CPU 时间始终为零 :(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393093/

相关文章:

c++ - 位掩码和长长

c - 需要检测任何可能的缓冲区溢出

objective-c - 获取枚举项的总数

go - 如何获取时间戳的毫秒值

c# - 任意System.DateTime到四个字符的军事时间字符串

c++ - 使用 Boost Graph 顶点属性进行动态分配

c++ - 检查所有可变参数模板参数的特征

c - 在 argv 上使用 fopen 时出现段错误

ruby-on-rails - 为什么 Time.parse 在 Rails 4 和 5 中失败,但在 Rails 3 中对于日期和时间之间有空格的日期字符串却没有?

C++不可复制类和多重继承,纯抽象类