C++ IBM AIX std::clock()?

C++ IBM AIX std::clock()?,c++,aix,C++,Aix,我在IBMAIX中执行以下代码 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));

我在IBMAIX中执行以下代码

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秒,时间1:0.000000 时间2:0.000181时钟每秒:1000000


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

根据手册

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

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

如果您想获得系统/实时,请查看
std::chrono::system\u clock

#include <chrono>
using std::chrono::system_clock;
system_clock::time_point time_now = system_clock::now();
#包括
使用std::chrono::系统时钟;
系统时钟::时间点时间现在=系统时钟::现在();

尽管有它的名字,但
clock
函数并不测量所谓的“挂钟时间”,而是(正如手册页所说)CPU时间,如果它实际执行的是CPU限制的操作,则只有您的进程才能计算CPU时间。不太可能与相同的执行量、挂钟、时间一样长(想想I/O、睡眠、其他不考虑CPU时间的等待)。例如,使用
gettimeofday
来测量所用的挂钟时间。@OP:请编辑您的帖子,修复语法错误和其他错误。此外,如果可以,请使用sleep/usleep/nanosleepI used boost::timer,但我是否必须使用boost::timer::cpu\u timer,对吗?是的,您可以使用
boost::timer::cpu\u timer
进行测量。您也可以查看
boost::chrono
名称空间。顺便说一句,AIX上没有
,或者我遗漏了什么?