Program Listing for File TickController.hpp
↰ Return to documentation for file (engine/include/Cacao/TickController.hpp)
#pragma once
#include "Cacao/FrameProcessor.hpp"
#include "DllHelper.hpp"
#include <memory>
#include <semaphore>
#include <mutex>
#include <atomic>
namespace Cacao {
class CACAO_API TickController {
public:
static TickController& Get();
TickController(const TickController&) = delete;
TickController(TickController&&) = delete;
TickController& operator=(const TickController&) = delete;
TickController& operator=(TickController&&) = delete;
void Start();
void Stop();
bool IsRunning() const {
return running;
}
private:
struct Impl;
std::unique_ptr<Impl> impl;
bool running;
struct SnapshotRequestControl {
SnapshotRequestControl() : request(false), grant(0), done(0), mutex() {}
std::atomic_bool request;
std::binary_semaphore grant;
std::binary_semaphore done;
std::mutex mutex;
} snapshotControl;
friend class FrameProcessor;
TickController();
~TickController();
};
}