欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C++實現(xiàn)高精度計時器

 更新時間:2024年02月04日 11:06:12   作者:草上爬  
chrono是C++ 11中的時間庫,它提供了跨平臺的高精度時鐘解決方案,精確到納秒級,本文主要為大家詳細介紹了如何使用chrono實現(xiàn)高精度計時器,感興趣的可以了解下

在調試程序的時候,有時需要知道程序語句執(zhí)行的耗時。特別是比較算法性能的時候,對耗時的精度要求較高。chrono是C++ 11中的時間庫,它提供了跨平臺的高精度時鐘解決方案,精確到納秒級。

一.時間點和時鐘

chrono庫頭文件中所有函數(shù)與類模板均定義在std::chrono命名空間中;

這里主要介紹時間點和時鐘兩個概念:

一般計時器就是從某個時間點開始,然后到某個時間點之間的計數(shù),就是我們一般稱之為耗時。

1.時間點

template <class Clock, class Duration = typename Clock::duration> class time_point;

std::chrono::time_point 表示一個具體時間。

第一個模板參數(shù)Clock用來指定所要使用的時鐘,在標準庫中有三種時鐘,分別為:

● system_clock:當前系統(tǒng)范圍(即對各進程都一致)的一個實時的日歷時鐘(wallclock)

● steady_clock:當前系統(tǒng)實現(xiàn)的一個穩(wěn)定時鐘,該時鐘的每個時間嘀嗒單位是均勻的(即長度相等)

● high_resolution_clock:當前系統(tǒng)實現(xiàn)的一個高分辨率時鐘。

第二個模板函數(shù)參數(shù)用來表示時間的計量單位(特化的std::chrono::duration<> )

時間點都有一個時間戳,即時間原點。chrono庫中采用的是Unix的時間戳1970年1月1日 00:00。所以time_point也就是距離時間戳(epoch)的時間長度(duration)。

2.時鐘

下面用demo測試一下上面三種時鐘的精度

#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
    cout << "system clock          : ";
    cout << system_clock::period::num << "/" << system_clock::period::den << " s" << endl;
    cout << "steady clock          : ";
    cout << steady_clock::period::num << "/" << steady_clock::period::den << " s" << endl;
    cout << "high resolution clock : ";
    cout << high_resolution_clock::period::num << "/"
         << high_resolution_clock::period::den << " s" << endl;
 
    return 0;
}

可以看到在我的電腦上,這三種時鐘的精度是一樣的,都是1納秒。但一般來說system_clock的精度是100納秒,而high_resolution的精度是1納秒,對于程序來說,一般微秒級就夠了,所以說chrono提供的時鐘精度綽綽有余。

二.計時器的實現(xiàn)

#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
class HighResolutionClock
{
public:
    HighResolutionClock()
    {
        update();
    }
 
    ~HighResolutionClock()
    {
 
    }
 
    void update()
    {
        m_start = high_resolution_clock::now();
    }
    // 秒
    double getSecond()
    {
        return getMicroSec() * 0.000001;
    }
    // 毫秒
    double getMilliSec()
    {
        return getMicroSec()*0.001;
    }
    // 微妙
    long long getMicroSec()
    {
        // 如果你愿意,也可以用nanoseconds獲取納秒,其實微秒已經夠用了
        return duration_cast<microseconds>(high_resolution_clock::now() - m_start).count();
    }
 
private:
    time_point<high_resolution_clock> m_start;
 
};
 
int main(int argc, char *argv[])
{
    HighResolutionClock hrClock;
    int sum = 0;
    hrClock.update();
 
    for (int i = 0; i < 100000; i++)
    {
        sum++;
    }
 
    cout << "cost time: " << hrClock.getMilliSec() <<" ms"<< endl;
    cout << "cost time: " << hrClock.getMicroSec() <<" us" << endl;
    return 0;
 
}

到此這篇關于基于C++實現(xiàn)高精度計時器的文章就介紹到這了,更多相關C++計時器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++實現(xiàn)json形式的Socket傳輸圖片

    C++實現(xiàn)json形式的Socket傳輸圖片

    這篇文章主要為大家詳細介紹了C++實現(xiàn)json形式的Socket傳輸圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 詳解OpenMP的線程同步機制

    詳解OpenMP的線程同步機制

    在本篇文章當中主要給大家介紹?OpenMP?當中線程的同步和互斥機制,在?OpenMP?當中主要有三種不同的線程之間的互斥方式。下面就來和大家來討論一下OpenMP當中的互斥操作,需要的可以參考一下
    2023-01-01
  • C++中函數(shù)指針詳解及代碼分享

    C++中函數(shù)指針詳解及代碼分享

    這篇文章主要介紹了C++中函數(shù)指針詳解及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • C字符串操作函數(shù)的實現(xiàn)詳細解析

    C字符串操作函數(shù)的實現(xiàn)詳細解析

    以下是對C語言中字符串操作函數(shù)的實現(xiàn)進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C語言動態(tài)內存管理深入探討

    C語言動態(tài)內存管理深入探討

    動態(tài)內存是相對靜態(tài)內存而言的。所謂動態(tài)和靜態(tài)就是指內存的分配方式。動態(tài)內存是指在堆上分配的內存,而靜態(tài)內存是指在棧上分配的內存,本文帶你深入探究C語言中動態(tài)內存的管理
    2022-06-06
  • C++控制臺實現(xiàn)密碼管理系統(tǒng)

    C++控制臺實現(xiàn)密碼管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++控制臺實現(xiàn)密碼管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù)

    詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù)

    這篇文章主要介紹了詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù),是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C++實現(xiàn)圖書館案例

    C++實現(xiàn)圖書館案例

    這篇文章主要為大家詳細介紹了C++實現(xiàn)圖書館案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Qt 事件過濾器的具體實現(xiàn)

    Qt 事件過濾器的具體實現(xiàn)

    事件過濾器,見名之意,就是將事件過濾一遍,將不需要的事件都清除掉,剩下需要的事件進行操作。本文詳細的介紹了Qt 事件過濾器的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • OpenSSL動態(tài)鏈接庫源碼安裝教程

    OpenSSL動態(tài)鏈接庫源碼安裝教程

    Openssl 是一個開放源代碼的SSL協(xié)議的產品實現(xiàn),它采用C語言作為開發(fā)語言,具備了跨系統(tǒng)的性能。這篇文章主要介紹了OpenSSL動態(tài)鏈接庫源碼安裝,需要的朋友可以參考下
    2021-11-11

最新評論