/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
base/cancellable.cpp
62 строки
1 KB
Maxim Pimenov
[base] Made the call to CancellationStatus update the status before return.
19 ноя 2019, 15:30
19 ноя 2019, 15:30
8554b2d
Код
Авторство
О чём код?
#include "base/cancellable.hpp" #include "base/assert.hpp" namespace base { void Cancellable::Reset() { std::lock_guard<std::mutex> lock(m_mutex); m_status = Status::Active; m_deadline = {}; } void Cancellable::Cancel() { std::lock_guard<std::mutex> lock(m_mutex); m_status = Status::CancelCalled; } void Cancellable::SetDeadline(std::chrono::steady_clock::time_point const & deadline) { std::lock_guard<std::mutex> lock(m_mutex); m_deadline = deadline; CheckDeadline(); } bool Cancellable::IsCancelled() const { return CancellationStatus() != Status::Active; } Cancellable::Status Cancellable::CancellationStatus() const { std::lock_guard<std::mutex> lock(m_mutex); CheckDeadline(); return m_status; } void Cancellable::CheckDeadline() const { if (m_status == Status::Active && m_deadline && *m_deadline < std::chrono::steady_clock::now()) { m_status = Status::DeadlineExceeded; } } std::string DebugPrint(Cancellable::Status status) { switch (status) { case Cancellable::Status::Active: return "Active"; case Cancellable::Status::CancelCalled: return "CancelCalled"; case Cancellable::Status::DeadlineExceeded: return "DeadlineExceeded"; } UNREACHABLE(); } } // namespace base