RunicVTT Open Source Virtual Tabletop for TTRPG using P2P
Loading...
Searching...
No Matches
MessageQueue.h
Go to the documentation of this file.
1#pragma once
2
3#include <queue>
4#include <mutex>
5#include <condition_variable>
6
7template <typename T>
9{
10private:
11 std::queue<T> queue_;
12 std::mutex mutex_;
13 std::condition_variable condition_;
14
15public:
16 void push(T value)
17 {
18 std::unique_lock<std::mutex> lock(mutex_);
19 queue_.push(std::move(value));
20 lock.unlock();
21 condition_.notify_one();
22 }
23
24 T pop()
25 {
26 std::unique_lock<std::mutex> lock(mutex_);
27 condition_.wait(lock, [this]
28 { return !queue_.empty(); });
29 T value = std::move(queue_.front());
30 queue_.pop();
31 return value;
32 }
33
34 bool try_pop(T& value)
35 {
36 std::unique_lock<std::mutex> lock(mutex_);
37 if (queue_.empty())
38 {
39 return false;
40 }
41 value = std::move(queue_.front());
42 queue_.pop();
43 return true;
44 }
45};
bool try_pop(T &value)
std::queue< T > queue_
std::condition_variable condition_
void push(T value)
std::mutex mutex_