天天看點

timer簡易計時器

API使用示例代碼: 

#include "boost/timer.hpp"
#include <iostream>

//原理:
//1, std::clock()是基礎,傳回自程序啟動直到調用時系統時鐘經曆的嘀嗒數
//2, 該基礎API并不跨平台,類Unix平台裡CLOCKS_PER_SEC等于1000000,
//而WINDOWS為1000,即計時精度分别為1/1000000秒和1/1000秒
//3, 同時因為最大計時範圍的原因,此類也不适于對跨年、月、日的大跨度時間計數;

int main(int argc, char *argv[])
{
    using namespace std;
    using namespace boost;

    timer t;//構造對象時即開始計時
    //t.restart();重新計時

    cout << "max timespan:"
         << t.elapsed_max() / 3600 << "h" << endl;//計算最大計時範圍
    cout << "min timespan:"
         << t.elapsed_min() << "s" << endl;//計算計時精度

    cout << "now-time esapsed:"
         << t.elapsed() << "s" << endl;//計算目前位置距程序啟動時流逝的秒數
    return 0;
}           
#include <ctime>
#include <limits>//求極限

class timer
{
public:
    timer() { _start_time = std::clock(); }
    void restart() { _start_time = std::clock(); }

    double elapsed() const//對于不修改内部資料的函數,用const修飾,既是風格也可以順便測試
    {
        //這裡使用double()作為一種顯式提升資料精度的方式,而不是隐式轉換
        return double(std::clock() - _start_time) / CLOCKS_PER_SEC;
    }

    double elapsed_min() const
    {
        return double(1) / double(CLOCKS_PER_SEC);
    }

    double elapsed_max() const
    {
        //使用标準庫接口limits,計算一種資料類型的極限值
        return (double((std::numeric_limits<std::clock_t>::max)()) 
            - double(_start_time)) / double(CLOCKS_PER_SEC);
    }

private:
    std::clock_t _start_time;
};           

繼續閱讀