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/n/154807.html