/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
android-951
base/deferred_task.cpp
49 строк
831 B
Maxim Pimenov
[base] Replaced the namespace my with base.
18 сен 2018, 14:46
18 сен 2018, 14:46
412387c
Код
Авторство
О чём код?
#include "base/deferred_task.hpp" namespace base { DeferredTask::DeferredTask(Duration const & duration) : m_duration(duration) { m_thread = threads::SimpleThread([this] { std::unique_lock<std::mutex> l(m_mutex); while (!m_terminate) { if (!m_fn) { m_cv.wait(l); continue; } if (m_cv.wait_for(l, m_duration) != std::cv_status::timeout || !m_fn) continue; auto fn = move(m_fn); m_fn = nullptr; l.unlock(); fn(); l.lock(); } }); } DeferredTask::~DeferredTask() { { std::unique_lock<std::mutex> l(m_mutex); m_terminate = true; } m_cv.notify_one(); m_thread.join(); } void DeferredTask::Drop() { { std::unique_lock<std::mutex> l(m_mutex); m_fn = nullptr; } m_cv.notify_one(); } } // namespace base