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-hk/n/154807.html
微信掃一掃
支付寶掃一掃