|
- // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
- // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
- #pragma once
-
- // periodic worker thread - periodically executes the given callback function.
- //
- // RAII over the owned thread:
- // creates the thread on construction.
- // stops and joins the thread on destruction (if the thread is executing a callback, wait for it to finish first).
-
- #include <chrono>
- #include <condition_variable>
- #include <functional>
- #include <mutex>
- #include <thread>
- namespace spdlog {
- namespace details {
-
- class periodic_worker
- {
- public:
- periodic_worker(const std::function<void()> &callback_fun, std::chrono::seconds interval);
- periodic_worker(const periodic_worker &) = delete;
- periodic_worker &operator=(const periodic_worker &) = delete;
- // stop the worker thread and join it
- ~periodic_worker();
-
- private:
- bool active_;
- std::thread worker_thread_;
- std::mutex mutex_;
- std::condition_variable cv_;
- };
- } // namespace details
- } // namespace spdlog
-
- #ifdef SPDLOG_HEADER_ONLY
- #include "periodic_worker-inl.h"
- #endif
|