diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-16 16:27:47 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-16 16:27:47 +0000 |
commit | 82a3db85138c91df397fd820a3b5d1a0b5c21ef9 (patch) | |
tree | 6c6435962594df18eb2b6ed1d07740aecd0778ff /yage/util/active.cpp | |
parent | 443ae47fc210bcfe10f6f6c5ac8aa3453e1d29d2 (diff) | |
download | YAGE-82a3db85138c91df397fd820a3b5d1a0b5c21ef9.tar.gz YAGE-82a3db85138c91df397fd820a3b5d1a0b5c21ef9.zip |
Asynchronous logging added
Diffstat (limited to 'yage/util/active.cpp')
-rw-r--r-- | yage/util/active.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
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> Active::create() +{ + std::unique_ptr<Active> 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 |