【发布时间】: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