59 lines
2.5 KiB
Markdown
59 lines
2.5 KiB
Markdown
|
1. **时长类型**:
|
|||
|
- `std::chrono::duration`:表示时间段。例如,`std::chrono::duration<int>` 表示基于整数的时间段,而 `std::chrono::duration<double>` 表示基于浮点数的时间段。
|
|||
|
- `std::chrono::hours`、`std::chrono::minutes`、`std::chrono::seconds`、`std::chrono::milliseconds`、`std::chrono::microseconds`、`std::chrono::nanoseconds`:具有不同单位的特定时长类型。
|
|||
|
|
|||
|
2. **时间点类型**:
|
|||
|
- `std::chrono::time_point`:表示时间点。它在时钟类型和时长类型上进行模板化。
|
|||
|
- `std::chrono::system_clock`、`std::chrono::steady_clock`、`std::chrono::high_resolution_clock`:`<chrono>` 提供的时钟类型。
|
|||
|
|
|||
|
3. **时钟函数**:
|
|||
|
- `std::chrono::duration_cast`:将一个时长转换为具有不同刻度的另一个时长。
|
|||
|
- `std::chrono::time_point_cast`:将一个时间点转换为具有不同时钟的另一个时间点。
|
|||
|
- `std::chrono::system_clock::now()`:根据系统时钟获取当前时间。
|
|||
|
- `std::chrono::steady_clock::now()`:根据稳定时钟(单调时钟)获取当前时间。
|
|||
|
- `std::chrono::high_resolution_clock::now()`:如果可用,根据高分辨率时钟获取当前时间。
|
|||
|
|
|||
|
4. **实用函数**:
|
|||
|
- `std::chrono::duration_values`:提供时长类型的最小值和最大值。
|
|||
|
- `std::chrono::time_point::min()`、`std::chrono::time_point::max()`:返回时间点类型的最小值和最大值。
|
|||
|
|
|||
|
5. **算术运算**:
|
|||
|
- 时长类型支持算术运算,如加法(`operator+`)、减法(`operator-`)、乘法(`operator*`)、除法(`operator/`)以及比较运算(`operator==`、`operator!=`、`operator<` 等)。
|
|||
|
|
|||
|
6. **时长字面值**:
|
|||
|
- 可以使用字面值后缀,如 `h`、`min`、`s`、`ms`、`us`、`ns` 来创建时长字面值。例如,`5s` 表示 5 秒。
|
|||
|
|
|||
|
这里是一个简单的示例,演示了这些功能:
|
|||
|
|
|||
|
```cpp
|
|||
|
#include <iostream>
|
|||
|
#include <chrono>
|
|||
|
|
|||
|
int main() {
|
|||
|
using namespace std::chrono;
|
|||
|
|
|||
|
// 定义时长
|
|||
|
auto 秒 = seconds(10);
|
|||
|
auto 毫秒 = 5ms;
|
|||
|
|
|||
|
// 添加时长
|
|||
|
auto 总时长 = 秒 + 毫秒;
|
|||
|
|
|||
|
// 获取当前时间点
|
|||
|
auto 开始 = steady_clock::now();
|
|||
|
|
|||
|
// 等待 2 秒
|
|||
|
std::this_thread::sleep_for(2s);
|
|||
|
|
|||
|
// 计算经过的时间
|
|||
|
auto 结束 = steady_clock::now();
|
|||
|
auto 经过时间 = duration_cast<seconds>(结束 - 开始);
|
|||
|
|
|||
|
std::cout << "总时长:" << 总时长.count() << " 毫秒\n";
|
|||
|
std::cout << "经过时间:" << 经过时间.count() << " 秒\n";
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|