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
7
template
<
typename
T>
8
class
MessageQueue
9
{
10
private
:
11
std::queue<T>
queue_
;
12
std::mutex
mutex_
;
13
std::condition_variable
condition_
;
14
15
public
:
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
};
MessageQueue
Definition
MessageQueue.h:9
MessageQueue::pop
T pop()
Definition
MessageQueue.h:24
MessageQueue::try_pop
bool try_pop(T &value)
Definition
MessageQueue.h:34
MessageQueue::queue_
std::queue< T > queue_
Definition
MessageQueue.h:11
MessageQueue::condition_
std::condition_variable condition_
Definition
MessageQueue.h:13
MessageQueue::push
void push(T value)
Definition
MessageQueue.h:16
MessageQueue::mutex_
std::mutex mutex_
Definition
MessageQueue.h:12
include
network
MessageQueue.h
Generated by
1.10.0