您的位置:首页 > 其它

跨平台的高精度计时类

2014-05-12 18:02 232 查看
windows环境用QueryPerformanceFrequency。

linux环境用gettimeofday。

两者都能精确到微妙us。

源码:

//******************************************************************************
//desc:time 
//name:mytimer.h
//auth:zhouping
//date:201400512
//******************************************************************************

#ifndef MYTIMER_H
#define MYTIMER_H

#ifdef WIN32

#include <windows.h>

class MyTimer
{
private:
    LONGLONG _freq;
    LARGE_INTEGER _begin;
    LARGE_INTEGER _end;

public:
    LONGLONG costTime; //花费的时间(精确到微秒us)

public:
    MyTimer()
    {
        LARGE_INTEGER tmp;
        QueryPerformanceFrequency(&tmp); //QueryPerformanceFrequency():返回硬件支持的高精度计数器的频率
        _freq = tmp.QuadPart;
        costTime = 0;
    }

    void Start() //开始计时
    {
        QueryPerformanceCounter(&_begin);
    }

    void End() //结束计时
    {
        QueryPerformanceCounter(&_end);
        costTime = (LONGLONG)((_end.QuadPart - _begin.QuadPart) * 1000000.0 / _freq);
    }

    void Reset()            // 计时清0
    {
        costTime = 0;
    }
};

#else

#include <sys/time.h>
#include <unistd.h>

class MyTimer
{
private:
    timeval _begin;
    timeval _end;

public:
    long long costTime; //花费的时间(精确到微秒us)

public:
    MyTimer()
    {
        costTime = 0;
    }
    void Start() //开始计时
    {
        gettimeofday(&_begin, NULL);
    }

    void End() //结束计时
    {
        gettimeofday(&_end, NULL);
        costTime = (_end.tv_sec - _begin.tv_sec) * 1000000ll + _end.tv_usec - _begin.tv_usec;
    }

    void Reset()            // 计时清0
    {
        costTime = 0;
    }
};
#endif

#endif //~MYTIMER_H
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: