欢迎光临散文网 会员登陆 & 注册

时钟

2023-07-22 23:20 作者:追逐彗星的尾巴  | 我要投稿

在<chrono>头文件中,有两个主要的时钟类:std::chrono::system_clockstd::chrono::steady_clock。前者提供了与操作系统的系统时间相关的功能,可以用于获取当前时间、计算时间间隔等;后者提供了一个稳定的时钟,不受系统时间调整的影响,通常用于测量时间间隔,例如性能分析。

时钟类提供了一个静态成员函数now来获取当前时间,其返回的类型是时间点time_point

时间间隔 / 时延

std::chrono::duration是一个模板类,用于表示时间间隔。其定义如下:

Rep表示时间间隔的数据类型,可以是整型或浮点型。Period表示时间单位的类型,默认为std::ratio<1>。例如,当几分钟的时间要存在short类型中时,可以写成 std::chrono::duration<short, std::ratio<60, 1>>,因为60秒是才是1分钟。当需要将毫秒级计数存在double类型中,可以写成std::chrono::duration<double, std::ratio<1, 1000>>,因为1秒等于1000毫秒。

std::chrono命名空间中,提供了一些预定义类型:nanoseconds[纳秒],microseconds[微秒],milliseconds[毫秒],seconds[秒],minutes[分]和hours[时]。

duration还支持四则运算。

时间点

std::chrono::time_point是一个模板类,用于表示时间点。它的第一个参数用来指定所要使用的时钟,第二个函数参数用来表示时间的计量单位(特化的std::chrono::duration)。

时间点的功能

I.时间计算和测量:时间点可用于执行时间间隔的计算和测量。通过记录两个时间点之间的时间差,可以精确地计算代码片段的执行时间,从而进行性能优化和时间复杂度分析。

II.时间比较:可以使用时间点进行时间的比较。这样可以判断事件的先后顺序,比较不同操作的执行时间,或者检查某个时间点是否在给定时间范围内。

III.定时任务和延时操作:时间点可以用于实现定时任务和延时操作。通过设置时间点,可以让程序在未来的某个特定时刻执行特定的任务,或者在当前时间点的基础上延时一段时间后再执行。

下面创建了一个利用对象生存周期进行自动计时的结构体Timer

超时

时间点一般用在后缀为until的函数中,比如wait_until

condition_variable的成员函数wait_untilwait的功能类似,它允许线程等待直到指定的时间点或条件满足为止。

timeout:等待的截止时间点

函数wait_until的作用是阻塞当前线程,直到条件变量被通知、超过了指定的截止时间,或者虚假唤醒(spurious wake-up)发生。

虚假唤醒是指使用条件变量等待的线程在没有明确被通知的情况下,也会从等待状态被唤醒(原因可能是系统内部的调度、硬件中断等)。

下面的例子展示了如何等待一个条件变量(具有超时功能)。

timeout是一个超时时间点,比当前时间晚500毫秒。

检查超时:在等待的过程中,如果等待超过了500毫秒,则跳出循环。

时钟的评论 (共 条)

分享到微博请遵守国家法律