divide WaitQueue from queue.hh
This commit is contained in:
parent
04d3dd67cf
commit
763d884a2d
@ -65,6 +65,7 @@ target_sources(nf7
|
||||
common/ptr_selector.hh
|
||||
common/queue.hh
|
||||
common/value.hh
|
||||
common/wait_queue.hh
|
||||
common/yas.hh
|
||||
|
||||
file/node_network.cc
|
||||
|
@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <condition_variable>
|
||||
#include <deque>
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
@ -39,43 +38,4 @@ class Queue {
|
||||
std::deque<T> tasks_;
|
||||
};
|
||||
|
||||
// Queue<T> with Wait() method
|
||||
template <typename T>
|
||||
class WaitQueue : private Queue<T> {
|
||||
public:
|
||||
WaitQueue() = default;
|
||||
WaitQueue(const WaitQueue&) = default;
|
||||
WaitQueue(WaitQueue&&) = default;
|
||||
WaitQueue& operator=(const WaitQueue&) = default;
|
||||
WaitQueue& operator=(WaitQueue&&) = default;
|
||||
|
||||
void Push(T&& task) noexcept {
|
||||
Queue<T>::Push(std::move(task));
|
||||
cv_.notify_all();
|
||||
}
|
||||
using Queue<T>::Pop;
|
||||
|
||||
void Notify() noexcept {
|
||||
cv_.notify_all();
|
||||
}
|
||||
|
||||
void Wait() noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait(k);
|
||||
}
|
||||
void WaitFor(auto dur) noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait_for(k, dur);
|
||||
}
|
||||
void WaitUntil(auto time) noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait_until(k, time);
|
||||
}
|
||||
|
||||
private:
|
||||
using Queue<T>::mtx_;
|
||||
|
||||
std::condition_variable cv_;
|
||||
};
|
||||
|
||||
} // namespace nf7
|
||||
|
48
common/wait_queue.hh
Normal file
48
common/wait_queue.hh
Normal file
@ -0,0 +1,48 @@
|
||||
#include <condition_variable>
|
||||
#include <deque>
|
||||
#include <mutex>
|
||||
|
||||
#include "common/queue.hh"
|
||||
|
||||
namespace nf7 {
|
||||
|
||||
// Queue<T> with Wait() method
|
||||
template <typename T>
|
||||
class WaitQueue : private Queue<T> {
|
||||
public:
|
||||
WaitQueue() = default;
|
||||
WaitQueue(const WaitQueue&) = default;
|
||||
WaitQueue(WaitQueue&&) = default;
|
||||
WaitQueue& operator=(const WaitQueue&) = default;
|
||||
WaitQueue& operator=(WaitQueue&&) = default;
|
||||
|
||||
void Push(T&& task) noexcept {
|
||||
Queue<T>::Push(std::move(task));
|
||||
cv_.notify_all();
|
||||
}
|
||||
using Queue<T>::Pop;
|
||||
|
||||
void Notify() noexcept {
|
||||
cv_.notify_all();
|
||||
}
|
||||
|
||||
void Wait() noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait(k);
|
||||
}
|
||||
void WaitFor(auto dur) noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait_for(k, dur);
|
||||
}
|
||||
void WaitUntil(auto time) noexcept {
|
||||
std::unique_lock<std::mutex> k(mtx_);
|
||||
cv_.wait_until(k, time);
|
||||
}
|
||||
|
||||
private:
|
||||
using Queue<T>::mtx_;
|
||||
|
||||
std::condition_variable cv_;
|
||||
};
|
||||
|
||||
} // namespace nf7
|
2
main.cc
2
main.cc
@ -1,5 +1,6 @@
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <condition_variable>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <thread>
|
||||
@ -15,6 +16,7 @@
|
||||
#include "nf7.hh"
|
||||
|
||||
#include "common/queue.hh"
|
||||
#include "common/wait_queue.hh"
|
||||
#include "common/yas.hh"
|
||||
|
||||
// Include glfw lastly to prevent conflict with windows.h.
|
||||
|
Loading…
x
Reference in New Issue
Block a user