2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-02-10 17:43:03 +00:00
Files
OpenAssetTools/src/ModMan/Utils/DispatchableThread.h
2026-01-27 23:49:37 +01:00

38 lines
851 B
C++

#pragma once
#include <condition_variable>
#include <deque>
#include <functional>
#include <mutex>
#include <optional>
#include <thread>
class DispatchableThread
{
public:
using cb_t = std::function<void()>;
DispatchableThread();
~DispatchableThread();
DispatchableThread(const DispatchableThread& other) = delete;
DispatchableThread(DispatchableThread&& other) noexcept = delete;
DispatchableThread& operator=(const DispatchableThread& other) = delete;
DispatchableThread& operator=(DispatchableThread&& other) noexcept = delete;
void Start();
void Terminate();
void Dispatch(cb_t cb);
private:
std::optional<cb_t> NextCallback();
void ThreadLoop();
std::mutex m_cb_mutex;
std::deque<cb_t> m_cb_list;
std::condition_variable m_cv;
std::thread m_thread;
bool m_terminate;
};