diff options
Diffstat (limited to 'graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h')
-rw-r--r-- | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h | 76 |
1 files changed, 38 insertions, 38 deletions
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h index a5f550041d..6a8cf7a2a6 100644 --- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h +++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h @@ -5,44 +5,44 @@ class Condition { public: - std::mutex m_mutex; - std::condition_variable m_condition; - ~Condition() { - m_condition.notify_all(); - } - void notify(std::unique_ptr<T> data) noexcept - { - { - std::lock_guard<std::mutex> eventLock(m_mutex); - any.swap(data); - } - // wake up one waiter - m_condition.notify_one(); - }; + std::mutex m_mutex; + std::condition_variable m_condition; + ~Condition() { + m_condition.notify_all(); + } + void notify(std::unique_ptr<T> data) noexcept + { + { + std::lock_guard<std::mutex> eventLock(m_mutex); + any.swap(data); + } + // wake up one waiter + m_condition.notify_one(); + }; - - std::unique_ptr<T> wait(unsigned timeout=0) - { - std::unique_lock<std::mutex> ul(m_mutex); - if (!timeout) { - m_condition.wait(ul,[&]() { - if (!any) - return false; - return true; - }); - } - else{ - if(!any){ - std::cv_status status = m_condition.wait_for(ul, std::chrono::milliseconds(timeout)); - if (status == std::cv_status::timeout) - { - return {}; - } - } - } - return std::unique_ptr<T>(any.release()); - - } + + std::unique_ptr<T> wait(unsigned timeout=0) + { + std::unique_lock<std::mutex> ul(m_mutex); + if (!timeout) { + m_condition.wait(ul,[&]() { + if (!any) + return false; + return true; + }); + } + else{ + if(!any){ + std::cv_status status = m_condition.wait_for(ul, std::chrono::milliseconds(timeout)); + if (status == std::cv_status::timeout) + { + return {}; + } + } + } + return std::unique_ptr<T>(any.release()); + + } private: - std::unique_ptr<T> any; + std::unique_ptr<T> any; }; |