为什么这样奇怪的结果为boost :: timer?

时间:2013-07-15 23:49:31

标签: c++ linux boost time g++

为什么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次使用

1 个答案:

答案 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。