From 82a3db85138c91df397fd820a3b5d1a0b5c21ef9 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Thu, 16 Nov 2017 16:27:47 +0000 Subject: Asynchronous logging added --- yage/util/active.cpp | 37 +++++++++++++++++++++++++++++++++++++ yage/util/active.h | 29 ++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 yage/util/active.cpp (limited to 'yage/util') diff --git a/yage/util/active.cpp b/yage/util/active.cpp new file mode 100644 index 00000000..13e7fc38 --- /dev/null +++ b/yage/util/active.cpp @@ -0,0 +1,37 @@ +#include "active.h" + +namespace yage +{ + +Active::Active() : running_(true) {} + +Active::~Active() +{ + send([this] { running_ = false; }); + thread_.join(); +} + +std::unique_ptr Active::create() +{ + std::unique_ptr result(new Active); + + result->thread_ = std::thread(&Active::run, result.get()); + + return result; +} + +void Active::send(Callback message) +{ + queue_.push(message); +} + +void Active::run() +{ + Callback fn; + while (running_) { + queue_.pop(fn); + fn(); + } +} + +} // namespace yage diff --git a/yage/util/active.h b/yage/util/active.h index 877ab75e..ca8d30ad 100644 --- a/yage/util/active.h +++ b/yage/util/active.h @@ -1,11 +1,38 @@ #ifndef YAGE_UTIL_ACTIVE_H #define YAGE_UTIL_ACTIVE_H +#include "syncqueue.h" + +#include +#include +#include + +namespace yage +{ + class Active { public: + typedef std::function Callback; + + Active(const Active &) = delete; + Active &operator=(const Active &) = delete; + + ~Active(); + + static std::unique_ptr create(); + + void send(Callback message); + +private: Active(); - virtual ~Active(); + void run(); + + bool running_; + SyncQueue queue_; + std::thread thread_; }; +} // namespace yage + #endif -- cgit