windows擷取高精度時間

來源:互聯網
上載者:User

如果當前系統中支援高解析度計數器,我們可以使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 進行高解析度的計時。

QueryPerformanceFrequency()
類型:Win32API
原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
作用:返回硬體支援的高精度計數器的頻率。
傳回值:非零,硬體支援高精度計數器;零,硬體不支援,讀取失敗

函數QueryPerformanceCounter用於得到高精度計時器的值(如果存在這樣的計時器)
原型:BOOL QueryPerformanceCounter(LARGE_INTEGER *ipPerformanceCount);//參數指向計數器的值
參數: LARGE_INTEGER *ipProformanceCount
為一個指標變數用於函數傳值,即指向現時計數器的值.如果安裝的硬體不支援高精度計時器,該參數將返回0,
傳回值:
如果安裝的硬體支援高精度計時器,函數將返回非0值.
如果安裝的硬體不支援高精度計時器,函數將返回0

一個時間類的實現

View Code

// ------------------------------  header file -----------------------#pragma once#include <Windows.h>class CTime{private:    CTime(void);    ~CTime(void);public:    static UINT64 GetMilliS();//毫秒    static UINT64 GetMicroS();//微秒    static UINT64 GetNanoS();//納秒private:    static UINT64 m_frequency;    static CTime m_self;};// -------------------------------- CTime.cpp ------------------------------#include "ctime.h"#include <assert.h>UINT64    CTime::m_frequency = 0;CTime    CTime::m_self;CTime::CTime(void){    LARGE_INTEGER fc;    if (!QueryPerformanceFrequency(&fc))    {        assert(FALSE);    }    m_frequency = fc.QuadPart;  //計時器的頻率}CTime::~CTime(void){}UINT64 CTime::GetMilliS(){    assert(m_frequency>1000);    LARGE_INTEGER fc;    if (!QueryPerformanceCounter(&fc))    {        assert(FALSE);    }    UINT64 c = fc.QuadPart;    UINT64 s = (c) / (m_frequency / 1000);    return s;}UINT64 CTime::GetMicroS(){    assert(m_frequency>1000*1000);    LARGE_INTEGER fc;    if (!QueryPerformanceCounter(&fc))    {        assert(FALSE);    }    UINT64 c = fc.QuadPart;    UINT64 s = (c) / (m_frequency / 1000 / 1000);    return s;}UINT64 CTime::GetNanoS(){    assert(m_frequency>1000*1000*1000);    LARGE_INTEGER fc;    if (!QueryPerformanceCounter(&fc))    {        assert(FALSE);    }    UINT64 c = fc.QuadPart;    UINT64 s = (c) / (m_frequency / 1000 / 1000 / 1000);    return s;}

如果系統不支援高精度計時器,可以使用GetTickCount(),精度是毫秒。還可以使用clock(),其精度也是毫秒。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.