美文网首页
微秒级时间获取

微秒级时间获取

作者: 糖葫芦_4273 | 来源:发表于2018-12-16 19:19 被阅读0次

    windows高精度记时方法:

    这个方法调用两个函数:
    • QueryPerformanceFrequency() 获取计算机内部高精度事件定时器的频率
    • QueryPerformanceCounter() 获取计算机内部高精度事件定时器自上电以来时钟周期数,与CPU频率无关
    记时原理:

    将两个时间点的QueryPerformanceCounter相减,得到在这段时间内计时器记录的次数,有了计数次数,再乘以每次的时间(频率的倒数)就得到了总共消耗的时间了。

    函数原型
    BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
    BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
    
    //LARGE_INTEGER定义如下,我们只用到这个联合体的QuadPart部分
    typedef union _LARGE_INTEGER {
        struct {
            ULONG LowPart;
            LONG HighPart;
        } DUMMYSTRUCTNAME;
        struct {
            ULONG LowPart;
            LONG HighPart;
        } u;
        LONGLONG QuadPart;
    } LARGE_INTEGER;
    
    简单的例子
    #include<windows.h>
    #include<iostream>
    using namespace std;
    
    void fun()
    {
        Sleep(100);//睡100毫秒
    }
    
    int main()
    {
        double runtime;
        LARGE_INTEGER frequency;  //frequency,用来储存计数器的频率
        LARGE_INTEGER start;      //start用来储存开始时计数器的计数
        LARGE_INTEGER end;        //end用来储存结束时计数器的计数
    
        //QueryPerformanceFrequency(&frequency)把获得的计数器频率储存到frequency.QuadPart中
        //若此电脑不支持高精度计时器,则函数返回值为0
        if (QueryPerformanceFrequency(&frequency))
        {
            //把此刻的计数器次数值储存到start.QuadPart中
            QueryPerformanceCounter(&start);
            fun();
            //把此刻的计数器次数值储存到end.QuadPart中
            QueryPerformanceCounter(&end);
            //总时间=次数差/频率
            //乘1000000是为了把单位换算成微秒
            //也可以乘1000来把单位换算成毫秒
            ////但是一定要注意,一定要把*1000与(end.QuadPart - start.QuadPart)放在一起
            runtime = (end.QuadPart - start.QuadPart) * 1000 * 1000 / frequency.QuadPart;
            cout<<"调用fun()函数一共消耗了 " << runtime << " (微秒)" << endl;
        }
        else
        {
            cout << "不支持高精度计时器" << endl;
        }
        system("pause");
    }
    

    相关文章

      网友评论

          本文标题:微秒级时间获取

          本文链接:https://www.haomeiwen.com/subject/wuyxkqtx.html