高精度的计时方法

Posted fr-ruiyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度的计时方法相关的知识,希望对你有一定的参考价值。

API用法详见:https://docs.microsoft.com/zh-cn/windows/win32/api/profileapi/

下面为封装好的计时类:

#include <profileapi.h>

class CTimer
{
public:
    CTimer() : m_nElapsedTime(0)
    {
        QueryPerformanceFrequency(&m_nFrequency);
    }
    ~CTimer(){}
public:
    void Start()
    {
        QueryPerformanceCounter(&m_nBeginTime);
    }
    void Stop()
    {
        LARGE_INTEGER _nEndTime;
        QueryPerformanceCounter(&_nEndTime);
        m_nElapsedTime = (_nEndTime.QuadPart - m_nBeginTime.QuadPart) * 1000000 / m_nFrequency.QuadPart;
    }
    void Restart()
    {
        m_nElapsedTime= 0;
        QueryPerformanceCounter(&m_nBeginTime);
    }
    //微秒
    double GetTime_us()
    {
        return m_nElapsedTime;
    }
    //毫秒
    double GetTime_ms()
    {
        return m_nElapsedTime/ 1000.0;
    }
    //秒
    double GetTime_s()
    {
        return m_nElapsedTime/ 1000000.0;
    }

private:
    LARGE_INTEGER m_nFrequency;
    LARGE_INTEGER m_nBeginTime;
    double m_nElapsedTime;
};

以上是关于高精度的计时方法的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

Qt精确定时器计时精度

C中函数的毫秒精度计时 - 跨平台

嵌入中的 Discord.js 秒精度更新计时器

如何以亚秒级精度计时操作的持续时间?

如何在使用片段和计时器的选项卡式活动上更新 UI