std::chrono::time_point 是c++11引入的一个模板类,用于表示特定的时间点。它通常和std::chrono::duration结合使用,支持加减操作和时间点比较操作。
以下是std::chrono::time_point的常见操作:
1.获取当前时间
#include <chrono> #include <iostream>int main() {auto now = std::chrono::high_resolution_clock::now();std::cout << "Time captured.\n";return 0; }
2.加减操作
time_point 和duration 可以直接加减操作,用于计算新的时间点或计算时间差
加时间
auto now = std::chrono::high_resolution_clock::now(); auto future_time = now + stf::chrono::seconds(10);// 给当前时间加10秒
减时间
auto now = std::chrono::high_resolution_clock::now(); auto past_now = now - std::chrono::minutes(5); // 当前时间减5分钟
3.计算时间差
time_point 可以相减,返回duration 类型,用于计算两个时间点的时间差
#include <iostream> #include <chrono>int main() {auto start = std::chrono::high_resolution_clock::now();std::this_thread::sleep_for(std::chrono::seconds(2));auto end = std::chrono::high_resolution_clock::now();auto elapsed = end - start;std::cout<<"Elapsed time: "<< std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count()<< " ms\n";return 0; }
4.比较操作
time_point 支持比较操作符<,<=,>,>=,==,!=
auto now = std::chrono::high_resolution_clock::now(); auto future_time = now + std::chrono::seconds(5); if (future_time > now) {std::cout << "Future time is later than now.\n"; }
5.强制类型转换
时间点的默认单位取决于其时钟类型 如(std::chrono::system_clock 或 std::chrono::high_resolution_clock).可以通过std::chrono::duration_cast将时间点转化为特定的时间单位
auto now = std::chrono::high_resolution_clock::now(); auto duration_since_epoch = now.time_since_epoch(); auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration_since_epoch); std::cout <<"Milliseconds since epoch: "<< millis.count() <<'\n';
6.获取时间点的秒、毫秒、微秒
通过time_since_epoch 和std::chrono::duration_cast
auto now = std::chrono::system_clock::now(); auto time_sin_epoch = now.time_since_epoch();auto seconds = std::chrono::duration_cast<std::chrono::seconds>(time_since_epoch); auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(time_since_epoch); auto microseconds = std::chrono::duratioin_cast<std::chrono::microseconds>(time_since_epoch);std::cout << "Seconds since epoch: "<< seconds.count()<<'\n'; std::cout << "Milliseconds since epoch: "<< milliseconds.count()<<'\n'; std::cout << "Microseconds since epoch: "<< microseconds.count()<<'\n';
7.初始化time_point
默认情况下,time_point 会被初始化为时间纪元(epoch),即0
std::chrono::time_point<std::chrono::system_clock> tp; // 时间点初始化为 epoch
可以通过指定duration初始化
auto tp = std::chrono::system_clock::time_point(std::chrono::seconds(10)); // 从 epoch 开始 10 秒
8.自定义时钟
可以结合自定义的时钟和time_point使用。例如,以下代码定义一个以小时为单位的自定义时钟
#include <chrono> #include <iostream>struct CustomClock {using duration = std::chrono::hours;using rep = duration::rep;using period = duration::period;using time_point = std::chrono::time_point<CustomClock>;static time_point now() noexcept {return time_point(duration(42)); // 固定时间点,假设现在是42小时} };int main() {auto custom_time = CustomClock::now();std::cout << "Custom clock time: "<< custom_time.time_since_epoch().count() << " hours\n";return 0; }
c++ chrono 操作
2025/1/17 22:33:47
来源:https://blog.csdn.net/qq_43361844/article/details/145191854
浏览:
次
关键词:c++ chrono 操作
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com
热文排行
- 本周后半段,北方将遭今春首场沙尘天气
- 编程-设计模式 6:适配器模式
- 2024年全国青少年信息素养python编程复赛真题+答案
- 如何利用大数据技术来识别和预防网络赌博行为?
- LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
- JVM:SpringBoot TomcatEmbeddedWebappClassLoader
- No module named ‘tvtk.custom.light‘ mayavi
- 解决 Ubuntu 系统中 “Temporary Failure in Name Resolution“ 错误
- YOLOv10有效涨点专栏目录
- 开普勒优化算法( KOA)及其Python和MATLAB实现