利用Windows API實現精確計時

來源:互聯網
上載者:User

// Windows API in winbase.h

Code
//
// Performance counter API's
//

WINBASEAPI
BOOL
WINAPI
QueryPerformanceCounter(
    __out LARGE_INTEGER *lpPerformanceCount
    );

WINBASEAPI
BOOL
WINAPI
QueryPerformanceFrequency(
    __out LARGE_INTEGER *lpFrequency
    ); 

 // PerfTimer.h

Code

#ifdef _DEBUG
#define TraceFnTime(szFunctionName) DebugTimer aTimer(szFunctionName)
#else
#define TraceFnTime(szFunctionName)
#endif

//////////////////////////////////////////////////////////////////////////
// using the difference of the CPU tick count to divide the CPU frequency per second
// time_span = (difference of CPU tick count) / (CPU frequency)  : (seconds)
//////////////////////////////////////////////////////////////////////////
class AFX_EXT_CLASS CPerfTimer
{
private:
    LARGE_INTEGER m_liFreq;
    LARGE_INTEGER m_liStart;
    LARGE_INTEGER m_liEnd;
public:
    CPerfTimer(void)//: //m_liFreq.QuadPart(0)//, m_liStart.QuadPart(0), m_liEnd.QuadPart(0)
    {
        QueryPerformanceFrequency(&m_liFreq); // cpu頻率
    }
    ~CPerfTimer(void)
    {};
public:
    inline void Start()
    {
        QueryPerformanceCounter(&m_liStart); // 開始計時的cpu tick
    }

    inline void Stop()
    {
        QueryPerformanceCounter(&m_liEnd); // 計時結束的cpu tick
    };

    inline double GetTimeSpan() // time unit is second
    {
        return (double)(m_liEnd.QuadPart - m_liStart.QuadPart)/(double)m_liFreq.QuadPart;
    }
};

// 利用臨時對象的構造和析構對統計函數已耗用時間
class AFX_EXT_CLASS DebugTimer
{
public:
    explicit DebugTimer(LPCTSTR lpszFuncName)
        :m_szFunction(lpszFuncName)
    { 
          m_thePerfTimer.Start(); 
        }

    ~DebugTimer()
       { 
         m_thePerfTimer.Stop(); 
         // 列印到output
         TRACE2("%s: %.12f\r\n", m_szFunction, m_thePerfTimer.GetTimeSpan());
       }
private:
    CPerfTimer m_thePerfTimer;
    LPCTSTR m_szFunction;
};

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.