欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > c++ chrono 操作

c++ chrono 操作

2025/1/17 22:33:47 来源:https://blog.csdn.net/qq_43361844/article/details/145191854  浏览:    关键词:c++ chrono 操作

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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com