diff options
author | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-09 13:18:40 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:51:32 +0300 |
commit | 3ddb131b04059920a2b20d86d669e4baced73a40 (patch) | |
tree | 7ca0b70ab2835e33af595b0e851bd3ca599be89b /base | |
parent | becab05072334170402cf91b088977076c3ebddd (diff) |
Review fixes
Diffstat (limited to 'base')
-rw-r--r-- | base/deferred_task.cpp | 20 | ||||
-rw-r--r-- | base/deferred_task.hpp | 12 |
2 files changed, 21 insertions, 11 deletions
diff --git a/base/deferred_task.cpp b/base/deferred_task.cpp index c769dab253..a3755dbab4 100644 --- a/base/deferred_task.cpp +++ b/base/deferred_task.cpp @@ -1,8 +1,11 @@ #include "deferred_task.hpp" -DeferredTask::DeferredTask(TDuration duration) : m_duration(duration) +namespace my { - m_thread = thread([this] { +DeferredTask::DeferredTask(TDuration const & duration) : m_duration(duration) +{ + m_thread = thread([this] + { unique_lock<mutex> l(m_mutex); while (!m_terminate) { @@ -15,11 +18,15 @@ DeferredTask::DeferredTask(TDuration duration) : m_duration(duration) if (m_cv.wait_for(l, m_duration) != cv_status::timeout) continue; - auto local_fn = move(m_fn); + auto fn = move(m_fn); m_fn = nullptr; - l.unlock(); - local_fn(); - l.lock(); + + if (fn) + { + l.unlock(); + fn(); + l.lock(); + } } }); } @@ -42,3 +49,4 @@ void DeferredTask::Drop() } m_cv.notify_one(); } +} // namespace my diff --git a/base/deferred_task.hpp b/base/deferred_task.hpp index 517953150d..6ef785ef02 100644 --- a/base/deferred_task.hpp +++ b/base/deferred_task.hpp @@ -1,12 +1,13 @@ #pragma once -#include "std/thread.hpp" #include "std/chrono.hpp" -#include "std/mutex.hpp" #include "std/condition_variable.hpp" #include "std/function.hpp" +#include "std/mutex.hpp" +#include "std/thread.hpp" - +namespace my +{ class DeferredTask { using TDuration = duration<double>; @@ -18,12 +19,12 @@ class DeferredTask bool m_terminate = false; public: - DeferredTask(TDuration duration); + DeferredTask(TDuration const & duration); ~DeferredTask(); void Drop(); - template<typename TFn> + template <typename TFn> void RestartWith(TFn const && fn) { { @@ -33,3 +34,4 @@ public: m_cv.notify_one(); } }; +} // namespace my |