NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
clocks.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_TIME_CLOCKS_HPP__
2#define NEFORCE_CORE_TIME_CLOCKS_HPP__
3
10
12NEFORCE_BEGIN_NAMESPACE__
13
19
20struct NEFORCE_API steady_clock;
21
22
29struct NEFORCE_API system_clock {
34
35 static_assert(duration::min() < duration::zero(), "a clock's minimum duration cannot be less than its epoch");
36
42 static constexpr bool is_steady = false;
43
50 static time_point now() noexcept;
51
57 static seconds to_seconds(const time_point& time_point_value) noexcept {
58 return time_point_value.since_epoch().to_sec();
59 }
60
66 static time_point from_seconds(const seconds time_value) noexcept {
67 using TP = _NEFORCE time_point<system_clock, seconds>;
68 return time_cast<duration>(TP(time_value));
69 }
70};
71
72
80struct NEFORCE_API steady_clock {
85
91 static constexpr bool is_steady = true;
92
97 static time_point now() noexcept;
98
104 template <typename Dur>
105 static system_clock::time_point to_system(const _NEFORCE time_point<steady_clock, Dur>& tp) {
106 const auto steady_now = steady_clock::now();
107 const auto sys_now = system_clock::now();
108
109 const auto diff = tp - steady_now;
110 return sys_now + _NEFORCE time_cast<system_clock::duration>(diff);
111 }
112};
113
129milliseconds NEFORCE_API relative_time(int64_t sec, int64_t nsec, bool is_monotonic = false) noexcept;
130
131
137template <typename T>
138struct is_clock;
139
140template <>
141struct is_clock<system_clock> : true_type {};
142
143template <>
144struct is_clock<steady_clock> : true_type {};
145
150template <typename T>
151NEFORCE_INLINE17 constexpr bool is_clock_v = is_clock<T>::value;
152 // Clocks
154
155NEFORCE_BEGIN_THIS_THREAD__
156
162
173template <typename Clock, typename Dur>
175 auto current = Clock::now();
176 if (Clock::is_steady) {
177 if (current < time) {
178 this_thread::sleep_for(time - current);
179 }
180 return;
181 }
182 while (current < time) {
183 this_thread::sleep_for(time - current);
184 current = Clock::now();
185 }
186}
187 // Thread
189
190NEFORCE_END_THIS_THREAD__
191
192NEFORCE_END_NAMESPACE__
193#endif // NEFORCE_CORE_TIME_CLOCKS_HPP__
时间类
milliseconds NEFORCE_API relative_time(int64_t sec, int64_t nsec, bool is_monotonic=false) noexcept
将绝对时间戳转换为相对延迟毫秒数
NEFORCE_INLINE17 constexpr bool is_clock_v
is_clock的便捷变量模板
long long int64_t
64位有符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
duration< int64_t, nano > nanoseconds
纳秒持续时间
constexpr ToDur time_cast(const duration< Rep, Period > &value)
持续时间类型转换
duration< int64_t > seconds
秒持续时间
void sleep_until(const time_point< Clock, Dur > &time)
使当前线程睡眠直到指定时间点
bool_constant< true > true_type
表示true的类型
typename nano::type period
static constexpr duration zero() noexcept
获取零持续时间
static constexpr duration min() noexcept
获取最小持续时间
检查是否为时钟类型
稳定时钟
duration::period period
时间单位比例
static time_point now() noexcept
获取当前时间点
nanoseconds duration
持续时间类型
static system_clock::time_point to_system(const _NEFORCE time_point< steady_clock, Dur > &tp)
将稳定时钟转为系统时钟
static constexpr bool is_steady
时钟稳定性标识
duration::rep rep
数值类型
_NEFORCE time_point< steady_clock > time_point
时间点类型
系统时钟
static constexpr bool is_steady
时钟稳定性标识
static time_point now() noexcept
获取当前时间点
duration::period period
时间单位比例
duration::rep rep
数值类型
static seconds to_seconds(const time_point &time_point_value) noexcept
将时间点转换为时间值
nanoseconds duration
持续时间类型
static time_point from_seconds(const seconds time_value) noexcept
从时间值创建时间点
_NEFORCE time_point< system_clock > time_point
时间点类型
时间点类模板
时间点类型