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
微信扫一扫
支付宝扫一扫