【问题标题】:IBM AIX std::clock()?IBM AIX std::clock()?
【发布时间】:2018-09-17 10:19:23
【问题描述】:

我在 IBM AIX 中执行以下代码。

int main(void)
{
    printf( "start\n");
    double time1 = (double)clock();      /* get initial time */
    time1 = time1 / CLOCKS_PER_SEC;      /*    in seconds    */

    boost::this_thread::sleep_for(boost::chrono::seconds(5));

    /* call clock a second time */
    double time2 = (((double)clock()) / CLOCKS_PER_SEC);
    double timedif = time2 - time1;
    printf( "The elapsed time is %lf seconds, time1:%lf time2:%lf CLOCKS_PER_SEC:%ld\n", 
            timedif));
}

结果是:

2018-04-07 09:58:37 开始
2018-04-07 09:58:42 经过的时间是0.000180秒,time1:0.000000 time2:0.000181 CLOCKS_PER_SEC:1000000

我不知道为什么经过的时间是 0.000180(为什么不是 5)?

【问题讨论】:

  • 尽管有它的名字,clock 函数并不测量所谓的“挂钟时间”,而是(如手册页所说)CPU 时间,如果它是,则只有您的进程才会考虑实际上在做一些受 CPU 限制的事情。不太可能与相同数量的执行、挂钟、时间一样长(想想 I/O、睡眠、当然不考虑 CPU 时间的其他等待)。使用gettimeofday,例如测量经过的挂钟时间。
  • @OP:请编辑您的帖子,修复语法和其他错误。另外,如果可以的话,使用 sleep/usleep/nanosleep

标签: c++ aix


【解决方案1】:

根据说明书

返回程序消耗的处理器时间。

这是程序消耗的 CPU 时间,不是物理时间。睡眠程序不消耗 CPU 时间。因此,用原始的话来说,它是从mainsleep 的时间间隔加上从sleep 到返回的时间间隔。

如果您想获得系统/实时,请查看std::chrono::system_clock 类。

#include <chrono>
using std::chrono::system_clock;
system_clock::time_point time_now = system_clock::now();

【讨论】:

  • 我使用了 boost::timer,但我必须使用 boost::timer::cpu_timer,对吗?
  • 是的,您可以使用boost::timer::cpu_timer 进行测量。您也可以查看boost::chrono 命名空间。
  • btw no &lt;chrono&gt; 在 AIX 上还是我遗漏了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2017-07-05
  • 2020-08-26
  • 1970-01-01
  • 2011-09-01
  • 2017-09-15
  • 2017-02-28
相关资源
最近更新 更多