1#ifndef NEFORCE_CORE_ASYNC_CONDITION_VARIABLE_HPP__
2#define NEFORCE_CORE_ASYNC_CONDITION_VARIABLE_HPP__
13NEFORCE_BEGIN_NAMESPACE__
48class NEFORCE_API condition_variable_base {
50#ifdef NEFORCE_PLATFORM_WINDOWS
60 condition_variable_base();
62 condition_variable_base(
const condition_variable_base&) =
delete;
63 condition_variable_base& operator=(
const condition_variable_base&) =
delete;
65 condition_variable_base(condition_variable_base&&) =
default;
66 condition_variable_base& operator=(condition_variable_base&&) =
default;
68 ~condition_variable_base();
80 void wait(mutex& mtx);
111 void notify_one() noexcept;
118 void notify_all() noexcept;
146 template <
typename Dur>
148 auto s = util.to_sec();
150 cond_.wait_until(*
lock.mutex(),
true, s.since_epoch().count(), ns.
count());
161 template <
typename Dur>
163 auto sec = util.to_sec();
165 cond_.wait_until(*
lock.mutex(), sec.since_epoch().count(), nanosec.count());
218 template <
typename Pred>
232 template <
typename Dur>
234 return this->__wait_until_impl(
lock, util);
244 template <
typename Dur>
246 return this->__wait_until_impl(
lock, util);
259 template <
typename Clock,
typename Dur>
261 const typename Clock::time_point entry = Clock::now();
267 if (Clock::now() < util) {
285 template <
typename Clock,
typename Dur,
typename Pred>
303 template <
typename Rep,
typename Period>
319 template <
typename Rep,
typename Period,
typename Pred>
330NEFORCE_END_NAMESPACE__
native_handle_type * native_handle() noexcept
获取原生句柄
cv_status wait_until(unique_lock< mutex > &lock, const time_point< Clock, Dur > &util)
等待直到任意时钟时间点
~condition_variable()=default
析构函数
bool wait_for(unique_lock< mutex > &lock, const duration< Rep, Period > &rest, Pred pred)
带谓词的等待指定持续时间
condition_variable()=default
构造函数
inner::condition_variable_base base_type
基类类型
void notify_all() noexcept
通知所有等待线程
void notify_one() noexcept
通知一个等待线程
void wait(unique_lock< mutex > &lock, Pred pred)
带谓词的无限期等待
cv_status wait_until(unique_lock< mutex > &lock, const time_point< steady_clock, Dur > &util)
等待直到稳定时钟时间点
base_type::native_handle_type native_handle_type
原生句柄类型
cv_status wait_for(unique_lock< mutex > &lock, const duration< Rep, Period > &rest)
等待指定的持续时间
_NEFORCE steady_clock clock_type
默认时钟类型
bool wait_until(unique_lock< mutex > &lock, const time_point< Clock, Dur > &util, Pred pred)
带谓词的等待直到时间点
cv_status wait_until(unique_lock< mutex > &lock, const time_point< system_clock, Dur > &util)
等待直到系统时钟时间点
void wait(unique_lock< mutex > &lock)
无限期等待
long long int64_t
64位有符号整数类型
int native_handle_type
系统句柄类型
duration< int64_t, nano > nanoseconds
纳秒持续时间
NEFORCE_CONST_FUNCTION NEFORCE_CONSTEXPR14 decimal_t ceil(const decimal_t x) noexcept
向上取整
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr rep count() const noexcept
获取计数值
static time_point now() noexcept
获取当前时间点
static time_point now() noexcept
获取当前时间点