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

從入門到精通C++11?<chrono>?庫(kù)特性

 更新時(shí)間:2025年06月28日 14:40:16   作者:碼事漫談  
chrono庫(kù)是C++11中一個(gè)非常強(qiáng)大和實(shí)用的庫(kù),它為時(shí)間處理提供了豐富的功能和類型安全的接口,通過(guò)本文的介紹,我們了解了chrono庫(kù)的基本概念,感興趣的朋友一起看看吧

一、引言

在 C++11 標(biāo)準(zhǔn)中,引入了許多新的庫(kù)特性,其中 <chrono> 庫(kù)為時(shí)間處理提供了強(qiáng)大而靈活的支持。這個(gè)庫(kù)使得在 C++ 中處理時(shí)間變得更加方便和精確,無(wú)論是簡(jiǎn)單的計(jì)時(shí)任務(wù),還是復(fù)雜的時(shí)間計(jì)算和日期處理,<chrono> 庫(kù)都能勝任。本文將帶領(lǐng)小白讀者從入門到精通 C++11 的 <chrono> 庫(kù)。

1.1 為什么需要<chrono>庫(kù)

在 C++11 之前,C++ 對(duì)于時(shí)間處理的支持相對(duì)有限,通常需要借助 C 標(biāo)準(zhǔn)庫(kù)中的 <ctime> 頭文件。然而,<ctime> 提供的功能較為基礎(chǔ),缺乏類型安全和靈活性。<chrono> 庫(kù)的出現(xiàn)彌補(bǔ)了這些不足,它提供了一套完整的時(shí)間處理體系,包括時(shí)間點(diǎn)、時(shí)間段和時(shí)鐘等概念。

1.2<chrono>庫(kù)的基本概念

在深入了解 <chrono> 庫(kù)之前,我們需要先了解幾個(gè)基本概念:

  • 時(shí)間點(diǎn)(Time Point):表示某個(gè)特定的時(shí)間瞬間,例如 2025 年 6 月 27 日 19 時(shí) 05 分 21 秒。
  • 時(shí)間段(Duration):表示兩個(gè)時(shí)間點(diǎn)之間的間隔,例如 1 小時(shí)、2 分鐘等。
  • 時(shí)鐘(Clock):用于測(cè)量時(shí)間的設(shè)備,不同的時(shí)鐘可能具有不同的精度和特性。

C++11  庫(kù)時(shí)間概念

二、時(shí)間段(Duration)

2.1 基本定義和使用

<chrono> 庫(kù)中,時(shí)間段由 std::chrono::duration 模板類表示。duration 模板類接受兩個(gè)模板參數(shù):RepPeriod。Rep 表示時(shí)間段的計(jì)數(shù)類型,通常是整數(shù)或浮點(diǎn)數(shù);Period 表示時(shí)間段的單位,是一個(gè) std::ratio 類型的模板參數(shù)。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何定義和使用 duration

#include <iostream>
#include <chrono>
int main() {
    // 定義一個(gè)表示 5 秒的時(shí)間段
    std::chrono::duration<int> fiveSeconds(5);
    std::cout << "Five seconds is " << fiveSeconds.count() << " seconds." << std::endl;
    return 0;
}

在這個(gè)示例中,我們定義了一個(gè) std::chrono::duration<int> 類型的對(duì)象 fiveSeconds,它表示 5 秒的時(shí)間段。count() 成員函數(shù)用于獲取時(shí)間段的計(jì)數(shù)值。

2.2 常用的時(shí)間段類型別名

為了方便使用,<chrono> 庫(kù)提供了一些常用的時(shí)間段類型別名,例如 std::chrono::nanoseconds、std::chrono::microseconds、std::chrono::milliseconds、std::chrono::seconds、std::chrono::minutesstd::chrono::hours。這些類型別名的定義如下:

using nanoseconds  = duration</* signed integer type of at least 64 bits */, nano>;
using microseconds = duration</* signed integer type of at least 55 bits */, micro>;
using milliseconds = duration</* signed integer type of at least 45 bits */, milli>;
using seconds      = duration</* signed integer type of at least 35 bits */>;
using minutes      = duration</* signed integer type of at least 29 bits */, ratio<  60>>;
using hours        = duration</* signed integer type of at least 23 bits */, ratio<3600>>;

以下是一個(gè)使用這些類型別名的示例:

#include <iostream>
#include <chrono>
int main() {
    // 定義一個(gè)表示 2 小時(shí)的時(shí)間段
    std::chrono::hours twoHours(2);
    // 將 2 小時(shí)轉(zhuǎn)換為分鐘
    std::chrono::minutes minutesInTwoHours = std::chrono::duration_cast<std::chrono::minutes>(twoHours);
    std::cout << "Two hours is " << minutesInTwoHours.count() << " minutes." << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::hours 類型別名定義了一個(gè)表示 2 小時(shí)的時(shí)間段,然后使用 std::chrono::duration_cast 函數(shù)將其轉(zhuǎn)換為 std::chrono::minutes 類型。

2.3 時(shí)間段的算術(shù)運(yùn)算

<chrono> 庫(kù)支持對(duì)時(shí)間段進(jìn)行各種算術(shù)運(yùn)算,例如加法、減法、乘法和除法。以下是一些示例:

#include <iostream>
#include <chrono>
int main() {
    std::chrono::seconds fiveSeconds(5);
    std::chrono::seconds threeSeconds(3);
    // 加法運(yùn)算
    std::chrono::seconds eightSeconds = fiveSeconds + threeSeconds;
    std::cout << "Five seconds + three seconds = " << eightSeconds.count() << " seconds." << std::endl;
    // 減法運(yùn)算
    std::chrono::seconds twoSeconds = fiveSeconds - threeSeconds;
    std::cout << "Five seconds - three seconds = " << twoSeconds.count() << " seconds." << std::endl;
    // 乘法運(yùn)算
    std::chrono::seconds tenSeconds = fiveSeconds * 2;
    std::cout << "Five seconds * 2 = " << tenSeconds.count() << " seconds." << std::endl;
    // 除法運(yùn)算
    std::chrono::seconds halfFiveSeconds = fiveSeconds / 2;
    std::cout << "Five seconds / 2 = " << halfFiveSeconds.count() << " seconds." << std::endl;
    return 0;
}

三、時(shí)間點(diǎn)(Time Point)

3.1 基本定義和使用

時(shí)間點(diǎn)由 std::chrono::time_point 模板類表示。time_point 模板類接受兩個(gè)模板參數(shù):ClockDuration。Clock 表示使用的時(shí)鐘類型,Duration 表示時(shí)間點(diǎn)相對(duì)于時(shí)鐘起始點(diǎn)的時(shí)間段。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何定義和使用 time_point

#include <iostream>
#include <chrono>
int main() {
    // 獲取當(dāng)前時(shí)間點(diǎn)
    std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
    std::cout << "Current time point: " << std::chrono::system_clock::to_time_t(now) << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::system_clock::now() 函數(shù)獲取當(dāng)前時(shí)間點(diǎn),然后使用 std::chrono::system_clock::to_time_t() 函數(shù)將其轉(zhuǎn)換為 std::time_t 類型,以便輸出。

3.2 時(shí)間點(diǎn)的比較和運(yùn)算

<chrono> 庫(kù)支持對(duì)時(shí)間點(diǎn)進(jìn)行比較和運(yùn)算??梢允褂帽容^運(yùn)算符(如 ==、!=<、<=>>=)來(lái)比較兩個(gè)時(shí)間點(diǎn)的先后順序。還可以對(duì)時(shí)間點(diǎn)進(jìn)行加法和減法運(yùn)算,例如在一個(gè)時(shí)間點(diǎn)上加上一個(gè)時(shí)間段得到一個(gè)新的時(shí)間點(diǎn),或者計(jì)算兩個(gè)時(shí)間點(diǎn)之間的時(shí)間段。

以下是一些示例:

#include <iostream>
#include <chrono>
#include <thread>
int main() {
    std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
    // 模擬一些耗時(shí)操作
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
    // 計(jì)算兩個(gè)時(shí)間點(diǎn)之間的時(shí)間段
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Elapsed time: " << elapsed_seconds.count() << " seconds." << std::endl;
    return 0;
}

在這個(gè)示例中,我們記錄了程序開始和結(jié)束的時(shí)間點(diǎn),然后計(jì)算了兩個(gè)時(shí)間點(diǎn)之間的時(shí)間段。

3.3 時(shí)間點(diǎn)的轉(zhuǎn)換

有時(shí)候,我們需要將一個(gè)時(shí)間點(diǎn)從一個(gè)時(shí)鐘轉(zhuǎn)換到另一個(gè)時(shí)鐘。<chrono> 庫(kù)提供了 std::chrono::clock_time_conversion 模板類來(lái)實(shí)現(xiàn)這個(gè)功能。不過(guò),不同時(shí)鐘之間的轉(zhuǎn)換可能需要考慮一些復(fù)雜的因素,例如時(shí)鐘的精度和偏移量。

四、時(shí)鐘(Clock)

4.1 系統(tǒng)時(shí)鐘(System Clock)

std::chrono::system_clock 是最常用的時(shí)鐘類型,它表示系統(tǒng)的實(shí)時(shí)時(shí)鐘。system_clock 可以用于獲取當(dāng)前時(shí)間、將時(shí)間點(diǎn)轉(zhuǎn)換為 std::time_t 類型等。以下是一個(gè)示例:

#include <iostream>
#include <chrono>
#include <ctime>
int main() {
    std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);
    std::cout << "Current time: " << std::ctime(&now_c);
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::system_clock::now() 函數(shù)獲取當(dāng)前時(shí)間點(diǎn),然后使用 std::chrono::system_clock::to_time_t() 函數(shù)將其轉(zhuǎn)換為 std::time_t 類型,最后使用 std::ctime() 函數(shù)將其轉(zhuǎn)換為字符串輸出。

4.2 穩(wěn)定時(shí)鐘(Steady Clock)

std::chrono::steady_clock 是一個(gè)單調(diào)遞增的時(shí)鐘,它不會(huì)受到系統(tǒng)時(shí)間調(diào)整的影響。因此,steady_clock 非常適合用于測(cè)量時(shí)間間隔,例如程序的運(yùn)行時(shí)間。以下是一個(gè)示例:

#include <iostream>
#include <chrono>
#include <thread>
int main() {
    std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
    // 模擬一些耗時(shí)操作
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::chrono::time_point<std::chrono::steady_clock> end = std::chrono::steady_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Elapsed time: " << elapsed_seconds.count() << " seconds." << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::steady_clock 來(lái)測(cè)量程序的運(yùn)行時(shí)間,確保測(cè)量結(jié)果不受系統(tǒng)時(shí)間調(diào)整的影響。

4.3 高分辨率時(shí)鐘(High Resolution Clock)

std::chrono::high_resolution_clock 是一個(gè)具有最高精度的時(shí)鐘。不過(guò),它的具體實(shí)現(xiàn)可能因平臺(tái)而異,有些平臺(tái)可能將其定義為 system_clocksteady_clock。以下是一個(gè)示例:

#include <iostream>
#include <chrono>
int main() {
    std::chrono::time_point<std::chrono::high_resolution_clock> start = std::chrono::high_resolution_clock::now();
    // 執(zhí)行一些操作
    for (int i = 0; i < 1000000; ++i) {
        // do something
    }
    std::chrono::time_point<std::chrono::high_resolution_clock> end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Elapsed time: " << elapsed_seconds.count() << " seconds." << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::high_resolution_clock 來(lái)測(cè)量一個(gè)簡(jiǎn)單循環(huán)的執(zhí)行時(shí)間。

五、實(shí)際應(yīng)用場(chǎng)景

5.1 性能測(cè)試

<chrono> 庫(kù)可以用于對(duì)程序的性能進(jìn)行測(cè)試。通過(guò)記錄程序開始和結(jié)束的時(shí)間點(diǎn),計(jì)算它們之間的時(shí)間段,我們可以得到程序的運(yùn)行時(shí)間。以下是一個(gè)示例:

#include <iostream>
#include <chrono>
#include <vector>
void fillVector(std::vector<int>& vec, int size) {
    for (int i = 0; i < size; ++i) {
        vec.push_back(i);
    }
}
int main() {
    std::vector<int> myVector;
    std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
    fillVector(myVector, 1000000);
    std::chrono::time_point<std::chrono::steady_clock> end = std::chrono::steady_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Time to fill vector: " << elapsed_seconds.count() << " seconds." << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::steady_clock 來(lái)測(cè)量 fillVector 函數(shù)的執(zhí)行時(shí)間。

5.2 定時(shí)任務(wù)

<chrono> 庫(kù)還可以用于實(shí)現(xiàn)定時(shí)任務(wù)。通過(guò)在某個(gè)時(shí)間點(diǎn)上加上一個(gè)時(shí)間段,我們可以得到一個(gè)未來(lái)的時(shí)間點(diǎn),然后在程序中等待直到這個(gè)時(shí)間點(diǎn)的到來(lái)。以下是一個(gè)示例:

#include <iostream>
#include <chrono>
#include <thread>
int main() {
    // 定義一個(gè) 5 秒后的時(shí)間點(diǎn)
    std::chrono::time_point<std::chrono::steady_clock> futureTime = std::chrono::steady_clock::now() + std::chrono::seconds(5);
    std::cout << "Waiting for 5 seconds..." << std::endl;
    std::this_thread::sleep_until(futureTime);
    std::cout << "5 seconds have passed." << std::endl;
    return 0;
}

在這個(gè)示例中,我們使用 std::chrono::steady_clock::now() 函數(shù)獲取當(dāng)前時(shí)間點(diǎn),然后加上一個(gè) 5 秒的時(shí)間段得到一個(gè)未來(lái)的時(shí)間點(diǎn),最后使用 std::this_thread::sleep_until() 函數(shù)等待直到這個(gè)時(shí)間點(diǎn)的到來(lái)。

六、總結(jié)

<chrono> 庫(kù)是 C++11 中一個(gè)非常強(qiáng)大和實(shí)用的庫(kù),它為時(shí)間處理提供了豐富的功能和類型安全的接口。通過(guò)本文的介紹,我們了解了 <chrono> 庫(kù)的基本概念,包括時(shí)間點(diǎn)、時(shí)間段和時(shí)鐘,以及如何使用它們進(jìn)行時(shí)間計(jì)算和處理。同時(shí),我們還介紹了 <chrono> 庫(kù)在性能測(cè)試和定時(shí)任務(wù)等實(shí)際應(yīng)用場(chǎng)景中的使用方法。希望本文能夠幫助小白讀者快速入門和掌握 C++11 的 <chrono> 庫(kù)。

到此這篇關(guān)于從入門到精通C++11 <chrono> 庫(kù)特性的文章就介紹到這了,更多相關(guān)C++<chrono> 庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    C語(yǔ)言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言字符串/內(nèi)存的相關(guān)函數(shù),文中通過(guò)示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 利用C語(yǔ)言實(shí)現(xiàn)順序表的實(shí)例操作

    利用C語(yǔ)言實(shí)現(xiàn)順序表的實(shí)例操作

    順序表是線性表中的一種重要的數(shù)據(jù)結(jié)構(gòu),也是最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),所以他不僅是學(xué)習(xí)中的重點(diǎn),也是應(yīng)用開發(fā)非常常用的一種數(shù)據(jù)結(jié)構(gòu)。這篇文章介紹如何利用C語(yǔ)言實(shí)現(xiàn)順序表。
    2016-08-08
  • Qt實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的示例詳解

    Qt實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Qt實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • set_new_handler(0)有什么用

    set_new_handler(0)有什么用

    本文主要介紹了set_new_handler(0)有什么用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語(yǔ)言使用realloc函數(shù)實(shí)現(xiàn)通訊錄源碼分析

    C語(yǔ)言使用realloc函數(shù)實(shí)現(xiàn)通訊錄源碼分析

    什么是動(dòng)態(tài)通訊錄,就是在靜態(tài)的基礎(chǔ)上改進(jìn)了一下,不在使用數(shù)組,而是使用指針和動(dòng)態(tài)內(nèi)存開辟的函數(shù),當(dāng)空間不夠的時(shí)候,便進(jìn)行增容
    2023-02-02
  • C++中構(gòu)造函數(shù)詳解

    C++中構(gòu)造函數(shù)詳解

    大家好,本篇文章主要講的是C++中構(gòu)造函數(shù)詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    本文主要介紹了C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Qt+Live555搭建RTSP服務(wù)器的方法步驟

    Qt+Live555搭建RTSP服務(wù)器的方法步驟

    本文主要介紹了Qt+Live555搭建RTSP服務(wù)器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C/C++?Qt?TreeWidget?單層樹形組件應(yīng)用小結(jié)

    C/C++?Qt?TreeWidget?單層樹形組件應(yīng)用小結(jié)

    TreeWidget?目錄樹組件,該組件適用于創(chuàng)建和管理目錄樹結(jié)構(gòu),在開發(fā)中我們經(jīng)常會(huì)把它當(dāng)作一個(gè)升級(jí)版的ListView組件使用,本文將通過(guò)TreeWidget實(shí)現(xiàn)多字段顯示,并增加一個(gè)自定義菜單,通過(guò)在指定記錄上右鍵可彈出該菜單并對(duì)指定記錄進(jìn)行操作
    2021-11-11
  • C++?std::chrono庫(kù)使用示例(實(shí)現(xiàn)C++?獲取日期,時(shí)間戳,計(jì)時(shí)等功能)

    C++?std::chrono庫(kù)使用示例(實(shí)現(xiàn)C++?獲取日期,時(shí)間戳,計(jì)時(shí)等功能)

    std::chrono是C++標(biāo)準(zhǔn)庫(kù)中的一個(gè)組件,用于表示和處理時(shí)間,這篇文章主要介紹了C++?std::chrono庫(kù)使用指南(實(shí)現(xiàn)C++?獲取日期,時(shí)間戳,計(jì)時(shí)等功能),需要的朋友可以參考下
    2023-06-06

最新評(píng)論