From 8f12f6ec20afcded2459a6e7553bfa7e9e5933ab Mon Sep 17 00:00:00 2001 From: Neeflix Date: Wed, 11 Jul 2018 17:18:01 +0200 Subject: [PATCH] jetzt aber :D --- FlippR-Driver/src/utilities/BlockingQueue.hpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 FlippR-Driver/src/utilities/BlockingQueue.hpp diff --git a/FlippR-Driver/src/utilities/BlockingQueue.hpp b/FlippR-Driver/src/utilities/BlockingQueue.hpp new file mode 100644 index 0000000..5d431e5 --- /dev/null +++ b/FlippR-Driver/src/utilities/BlockingQueue.hpp @@ -0,0 +1,49 @@ +/* + * BlockingQueue.hpp + * + * Created on: May 17, 2018 + * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht + */ + +#ifndef SRC_UTILITIES_BLOCKINGQUEUE_HPP_ +#define SRC_UTILITIES_BLOCKINGQUEUE_HPP_ + +#include +#include +#include + +#include "IBlockingQueue.h" + +using namespace boost; + +template +class BlockingQueue : public IBlockingQueue +{ +private: + std::mutex d_mutex; + std::condition_variable d_condition; + heap::priority_queue> p_queue; + +public: + void push(T const& value) + { + { + std::unique_lock lock(this->d_mutex); + p_queue.push(value); + } + this->d_condition.notify_one(); + } + + T pop() + { + std::unique_lock lock(this->d_mutex); + this->d_condition.wait(lock, [=]{ return !this->p_queue.empty(); }); + T rc = *this->p_queue.begin(); + this->p_queue.pop(); + return rc; + } +}; + + + +#endif /* SRC_UTILITIES_BLOCKINGQUEUE_HPP_ */