3 #ifndef INCLUDE_NN_NLIB_THREADING_CONDVAR_H_ 4 #define INCLUDE_NN_NLIB_THREADING_CONDVAR_H_ 15 #ifndef NLIB_CONDVAR_USE_FALLBACK 35 #if defined(NLIB_CXX11_CONSTEXPR) && defined(NLIB_CXX11_DEFAULTED_AND_DELETED_FUNCTIONS) 62 template <
class lock_type>
63 errno_t Wait(lock_type& lock) NLIB_NOEXCEPT NLIB_REQUIRES(lock) {
70 template <
class lock_type>
72 NLIB_NOEXCEPT NLIB_REQUIRES(lock) {
73 return nlib_cond_wait_for(&cond_, detail::GetRawMutex(lock), timeout.ToTimeValue().tick);
75 template <
class lock_type>
79 datetime.ToTimeValue().tick);
83 #if defined(NLIB_CXX11_CONSTEXPR) && defined(NLIB_CXX11_DEFAULTED_AND_DELETED_FUNCTIONS) 101 NLIB_REQUIRES(lock) {
111 #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)
日時を指定したタイムアウトつきのウェイトをします。