16 #ifndef INCLUDE_NN_NLIB_THREADING_CONDVAR_H_ 17 #define INCLUDE_NN_NLIB_THREADING_CONDVAR_H_ 28 #ifndef NLIB_CONDVAR_USE_FALLBACK 48 #if defined(NLIB_CXX11_CONSTEXPR) && defined(NLIB_CXX11_DEFAULTED_AND_DELETED_FUNCTIONS) 75 template <
class lock_type>
76 errno_t Wait(lock_type& lock) NLIB_NOEXCEPT NLIB_REQUIRES(lock) {
83 template <
class lock_type>
85 NLIB_NOEXCEPT NLIB_REQUIRES(lock) {
86 return nlib_cond_wait_for(&cond_, detail::GetRawMutex(lock), timeout.ToTimeValue().tick);
88 template <
class lock_type>
92 datetime.ToTimeValue().tick);
96 #if defined(NLIB_CXX11_CONSTEXPR) && defined(NLIB_CXX11_DEFAULTED_AND_DELETED_FUNCTIONS) 107 NLIB_REQUIRES(lock) {
114 NLIB_REQUIRES(lock) {
124 #endif // INCLUDE_NN_NLIB_THREADING_CONDVAR_H_ int64_t tick
nlib_time, nlib_durationとして利用することができます。
TimeValue ToTimeValue() const noexcept
TimeValueオブジェクトに変換します。
void NotifyAll() noexcept
ウェイトしているスレッド全てにシグナルします。
void Notify() noexcept
ウェイトしているスレッドの1つ以上にシグナルします。
ミューテックス, 再入可能ミューテックス, 再入とタイムアウトが可能なミューテックスを実装しています。 ...
最も単純なクリティカルセクションです。リエントラントではありません。
NLIB_CHECK_RESULT errno_t WaitFor(lock_type &lock, const nlib_ns::TimeSpan &timeout) noexcept NLIB_REQUIRES(lock)
期間を指定したタイムアウトつきのウェイトをします。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
errno_t Wait(lock_type &lock) noexcept NLIB_REQUIRES(lock)
ウェイトします。
TimeValue ToTimeValue() const noexcept
TimeValueオブジェクトを返します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
NLIB_CHECK_RESULT errno_t WaitUntil(lock_type &lock, const nlib_ns::DateTime &datetime) noexcept NLIB_REQUIRES(lock)
日時を指定したタイムアウトつきのウェイトをします。