为什么boost :: timer会给我这么奇怪的结果?
我的工作解决方案是使用来自gettimeofday
的{{1}}函数的包装器,但我不明白为什么<time.h>
在这里不适用于我。我做错了什么?
boost::timer
试验:
class Timer {
private:
timeval startTime;
public:
void start(){
gettimeofday(&startTime, NULL);
}
double stop(){
timeval endTime;
long seconds, useconds;
double duration;
gettimeofday(&endTime, NULL);
seconds = endTime.tv_sec - startTime.tv_sec;
useconds = endTime.tv_usec - startTime.tv_usec;
duration = seconds + useconds/1000000.0;
return duration;
}
long stop_useconds(){
timeval endTime;
long useconds;
gettimeofday(&endTime, NULL);
useconds = endTime.tv_usec - startTime.tv_usec;
return useconds;
}
static void printTime(double duration){
printf("%5.6f seconds\n", duration);
}
};
结果:
0.000100秒
0&lt;&lt; ??????????
40 <&lt; ????????????????
40 <&lt; ???????????????????????????????????
Munge8已过去:100次使用
0.000100秒
0
40
40
Munge8已过去:100次使用
0.000099秒
0
40
40
Munge8已过去:99次使用
答案 0 :(得分:3)
你不应该使用boost :: timer - http://www.boost.org/doc/libs/1_54_0/libs/timer/doc/original_timer.html#Class计时器
在POSIX上测量CPU时间 - 而不是挂钟时间。
考虑使用boost :: chrono或std :: chrono - 如果你想让自己与系统挂钟漂移或移位隔离,你可能需要看看steady_clock - 实现定时器时的其他时钟。我希望在POSIX上这将使用CLOCK_MONOTONIC上的clock_gettime。