最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一.時(shí)間點(diǎn)和時(shí)鐘

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

這里主要介紹時(shí)間點(diǎn)和時(shí)鐘兩個(gè)概念:

一般計(jì)時(shí)器就是從某個(gè)時(shí)間點(diǎn)開始,然后到某個(gè)時(shí)間點(diǎn)之間的計(jì)數(shù),就是我們一般稱之為耗時(shí)。

1.時(shí)間點(diǎn)

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

std::chrono::time_point 表示一個(gè)具體時(shí)間。

第一個(gè)模板參數(shù)Clock用來指定所要使用的時(shí)鐘,在標(biāo)準(zhǔn)庫中有三種時(shí)鐘,分別為:

● system_clock:當(dāng)前系統(tǒng)范圍(即對(duì)各進(jìn)程都一致)的一個(gè)實(shí)時(shí)的日歷時(shí)鐘(wallclock)

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

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

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

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

2.時(shí)鐘

下面用demo測(cè)試一下上面三種時(shí)鐘的精度

#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;
}

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

二.計(jì)時(shí)器的實(shí)現(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獲取納秒,其實(shí)微秒已經(jīng)夠用了
        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;
 
}

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

相關(guān)文章

  • C++實(shí)現(xiàn)簡(jiǎn)易的彈球小游戲

    C++實(shí)現(xiàn)簡(jiǎn)易的彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易的彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Visual Studio添加第三方庫的實(shí)現(xiàn)步驟

    Visual Studio添加第三方庫的實(shí)現(xiàn)步驟

    使用Visual Studio編寫C語言程序能夠提供全面而強(qiáng)大的開發(fā)環(huán)境,本文主要介紹了Visual Studio添加第三方庫的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++動(dòng)態(tài)內(nèi)存分配(new/new[]和delete/delete[])詳解

    C++動(dòng)態(tài)內(nèi)存分配(new/new[]和delete/delete[])詳解

    這篇文章主要介紹了C++動(dòng)態(tài)內(nèi)存分配(new/new[]和delete/delete[])詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++實(shí)現(xiàn)RSA加密解密算法是示例代碼

    C++實(shí)現(xiàn)RSA加密解密算法是示例代碼

    非對(duì)稱加密方式可以使通信雙方無需事先交換密鑰就可以建立安全通信,因此被廣泛應(yīng)用于身份認(rèn)證、數(shù)字簽名、等信息交換領(lǐng)域。其中最具有代表性的非對(duì)稱加密方式就是RSA公鑰密碼體制。本文將用C++實(shí)現(xiàn)RSA加密解密算法,需要的可以參考一下
    2022-09-09
  • c++如何讀取文件中的內(nèi)容和往文件中寫入數(shù)據(jù)

    c++如何讀取文件中的內(nèi)容和往文件中寫入數(shù)據(jù)

    C++文件流是用于進(jìn)行文件讀寫操作的工具,它提供了一種能夠簡(jiǎn)單、高效地與外部文件進(jìn)行交互的方式,這篇文章主要介紹了c++如何讀取文件中的內(nèi)容和往文件中寫入數(shù)據(jù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • pthread_cond_wait() 用法深入分析

    pthread_cond_wait() 用法深入分析

    以下是對(duì)pthread_cond_wait的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • Windows消息傳遞機(jī)制詳解

    Windows消息傳遞機(jī)制詳解

    這篇文章主要介紹了Windows消息傳遞機(jī)制,有助于讀者更好的理解windows編程的消息機(jī)制,需要的朋友可以參考下
    2014-07-07
  • c++特殊構(gòu)造函數(shù)詳解

    c++特殊構(gòu)造函數(shù)詳解

    大家好,本篇文章主要講的是c++特殊構(gòu)造函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言中基礎(chǔ)小問題詳細(xì)介紹

    C語言中基礎(chǔ)小問題詳細(xì)介紹

    這篇文章詳細(xì)介紹了C語言中基礎(chǔ)小問題,有需要的朋友可以參考一下
    2013-10-10
  • 詳解C++程序中定義struct結(jié)構(gòu)體的方法

    詳解C++程序中定義struct結(jié)構(gòu)體的方法

    C++中同樣擁有C語言中的結(jié)構(gòu)體,下面就來詳解C++程序中定義struct結(jié)構(gòu)體的方法,需要的朋友可以參考下
    2016-05-05

最新評(píng)論

登封市| 伊川县| 旬邑县| 贵德县| 六盘水市| 岗巴县| 犍为县| 达尔| 泰和县| 翁源县| 大英县| 门源| 乐至县| 涿鹿县| 堆龙德庆县| 叶城县| 丰顺县| 土默特右旗| 蓝山县| 屏南县| 普兰县| 罗江县| 孝感市| 乌兰察布市| 黑河市| 来宾市| 白朗县| 连山| 泽库县| 喀什市| 兰西县| 福清市| 东海县| 樟树市| 青川县| 博白县| 凉城县| 泽普县| 奉化市| 东阳市| 山西省|