From f2a848cbcc41f29fb62ee67aef95136ae1a650da Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:31:51 +0100 Subject: core: Event loop rework (#5466) * Event loop rework * revert missed --- src/managers/eventLoop/EventLoopManager.hpp | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/managers/eventLoop/EventLoopManager.hpp (limited to 'src/managers/eventLoop/EventLoopManager.hpp') diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp new file mode 100644 index 00000000..d55b54a9 --- /dev/null +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "EventLoopTimer.hpp" + +class CEventLoopManager { + public: + void enterLoop(wl_display* display, wl_event_loop* wlEventLoop); + void addTimer(std::shared_ptr timer); + void removeTimer(std::shared_ptr timer); + + // recalculates timers + void nudgeTimers(); + + private: + struct { + wl_event_loop* loop = nullptr; + wl_display* display = nullptr; + std::thread pollThread; + } m_sWayland; + + struct { + std::mutex timersMutex; + std::mutex timersRqMutex; + std::vector> timers; + std::thread timerThread; + bool event = false; + std::condition_variable cv; + } m_sTimers; + + struct { + std::mutex loopMutex; + std::mutex eventRequestMutex; + bool event = false; + std::condition_variable cv; + } m_sLoopState; + + bool m_bTerminate = false; +}; + +inline std::unique_ptr g_pEventLoopManager; \ No newline at end of file -- cgit v1.2.3