PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
command_queue.h
1#pragma once
2
3#include <condition_variable>
4#include <functional>
5#include <mutex>
6#include <queue>
7
8namespace pixelbullet
9{
12{
13public:
15 bool Push(const std::function<void()>& command)
16 {
17 {
18 std::lock_guard<std::mutex> lock(mutex_);
19 if (closed_)
20 {
21 return false;
22 }
23 queue_.push(command);
24 }
25 cond_.notify_one();
26 return true;
27 }
28
30 bool Pop(std::function<void()>& command)
31 {
32 std::unique_lock<std::mutex> lock(mutex_);
33 cond_.wait(lock, [this]() { return closed_ || !queue_.empty(); });
34
35 if (queue_.empty())
36 {
37 return false;
38 }
39
40 command = std::move(queue_.front());
41 queue_.pop();
42 return true;
43 }
44
45 void Close()
46 {
47 {
48 std::lock_guard<std::mutex> lock(mutex_);
49 closed_ = true;
50 }
51 cond_.notify_all();
52 }
53
54private:
55 std::mutex mutex_;
56 std::condition_variable cond_;
57 std::queue<std::function<void()>> queue_;
58 bool closed_ = false;
59};
60} // namespace pixelbullet
A simple thread-safe command queue.
Definition command_queue.h:12
bool Pop(std::function< void()> &command)
Blocks until a command is available or the queue is closed.
Definition command_queue.h:30
bool Push(const std::function< void()> &command)
Push a new command into the queue.
Definition command_queue.h:15