C++標準庫中的Chrono庫是C++11新增的一個時間庫,提供了與時間點(time points)和時間段(time durations)相關的類和函數。本文將從多個方面對C++ Chrono庫進行詳細闡述,包括C++ Chrono 24、C++ Chronometer、C++ Chronograph、C++ Chronological等方面。下面將分小節依次進行講解。
一、C++ Chrono 24
C++ Chrono 24主要用於計算24小時制的時間,包括小時、分鐘、秒、毫秒和微秒。以下是一個簡單的C++ Chrono 24代碼示例:
#include #include using namespace std; using namespace std::chrono; int main() { auto start = system_clock::now(); // do something auto end = system_clock::now(); auto diff = duration_cast(end - start); auto hh = duration_cast(diff); auto mm = duration_cast(diff - hh); auto ss = duration_cast(diff - hh - mm); auto ms = duration_cast(diff - hh - mm - ss); auto us = duration_cast(diff - hh - mm - ss - ms); cout << hh.count() << ":" << mm.count() << ":" << ss.count() << "." << ms.count() << "." << us.count() << endl; return 0; }
在這個代碼示例中,我們使用了system_clock來獲取當前時間,並用duration_cast將時間點轉換為對應的時間段。接著,我們將毫秒和微秒分離,並分別輸出到控制台上。
二、C++ Chronometer
C++ Chronometer主要用於計算一個操作所需的時間。以下是一個簡單的C++ Chronometer示例:
#include #include using namespace std::chrono; class Chronometer { public: Chronometer() : start_(system_clock::now()) {} void Reset() { start_ = system_clock::now(); } double Elapsed() { auto end = system_clock::now(); auto diff = duration_cast(end - start_); return static_cast(diff.count()) / 1000000000.0; } private: time_point start_; }; int main() { Chronometer chr; // do something std::cout << "Elapsed time: " << chr.Elapsed() << std::endl; return 0; }
在這個示例中,我們定義了一個 Chronometer 類,它包含一個成員變數 start_ 表示計時器的開始時間。在類的構造函數中初始化 start_ 變數,用 Reset 函數重置計時器並在 Elapsed 函數中返回從計時器開始到當前時間的時間差。
三、C++ Chronograph
C++ Chronograph主要用於記錄時間點和時間段,並支持將時間點的值轉換為字元串。以下是一個簡單的C++ Chronograph示例:
#include #include #include using namespace std::chrono; class Chronograph { public: Chronograph() : start_(system_clock::now()) {} void Record(const std::string& label) { auto end = system_clock::now(); auto diff = duration_cast(end - start_); std::cout << label << " " << diff.count() << "ms.\n"; start_ = end; } std::string Now() { auto now = system_clock::to_time_t(system_clock::now()); return std::ctime(&now); } private: time_point start_; }; int main() { Chronograph cg; std::cout << cg.Now(); // do something cg.Record("Step 1"); // do something cg.Record("Step 2"); std::cout << cg.Now(); return 0; }
在這個示例中,我們定義了一個 Chronograph 類,它包含一個成員變數 start_ 表示計時器的開始時間。在 Record 函數中,我們記錄當前時間點和之前記錄時間點的時間差,並將其輸出到控制台上。在 Now 函數中,我們將當前時間點轉換為一個字元串返回。
四、C++ Chronological
C++ Chronological主要用於時間間隔的比較,提供了比較兩個時間點之間的時間段大小的函數。以下是一個簡單的C++ Chronological示例:
#include #include using namespace std::chrono; int main() { auto timepoint1 = system_clock::now(); auto timepoint2 = system_clock::now() + seconds(10); auto duration1 = timepoint2 - timepoint1; if (duration1 > seconds(5)) { std::cout << "timepoint2 is " << duration_cast(duration1).count() << "ms later than timepoint1\n"; } else { std::cout << "timepoint2 is " << duration_cast(duration1).count() << "ms earlier than timepoint1\n"; } auto duration2 = minutes(1) + seconds(30); if (duration1 < duration2) { std::cout << "duration1 is shorter than duration2\n"; } else { std::cout << "duration1 is longer than duration2\n"; } return 0; }
在這個示例中,我們比較了兩個時間段 duration1 和 duration2 的大小,並輸出了比較結果。
五、總結
在本文中,我們從C++ Chrono 24、C++ Chronometer、C++ Chronograph、C++ Chronological等不同角度深入闡述了C++ Chrono庫的使用方法和注意事項。C++ Chrono庫提供了非常豐富的時間支持,它的靈活性和高性能為開發者提供了更多的可能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154807.html