使用clock_gettime()函数时遇到一些问题。

#include <iostream>
#include <time.h>

timespec timer_start;
timespec timer_end;

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &timer_start);
// sleep for 5 seconds
boost::this_thread::sleep(boost::posix_time::milliseconds(5000));
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &timer_end);

std::cout << (timer_end.tv_sec - timer_start.tv_sec) << ":" << (timer_end.tv_nsec - timer_start.tv_nsec) << std::endl;

我得到的输出是这个

0:6934599

似乎计时器仅经过693毫秒左右。

我在Linux gnu gcc 4.6上使用g++ -lrt编译程序。我还收到了语义错误,说
无法解析符号“CLOCK_PROCESS_CPUTIME_ID”

谢谢。

最佳答案

除了运行程序无法编译失败的可能性外,睡眠通常是系统调用:调用内核函数,内核将线程发送到睡眠状态,安排其他线程和进程运行(或CPU进入节能状态)模式),并在请求的时间再次唤醒原始线程。在这段时间内,休眠线程不会占用CPU时间。经过的(实际)时间通常称为挂墙时间。

将其与代码中的while循环的实时等待进行对比,该循环反复检查时钟,并且仅在5秒钟后终止。这种等待会占用更多其他进程的CPU时间。

另请注意,6934599纳秒约为6.93毫秒,而不是693。

09-07 06:43