From 7ec8336431787156826185628ad3ee05dc327d2a Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 21 Mar 2025 19:00:45 +0530 Subject: Add event loop with uv --- src/AsyncEventLoop.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/AsyncEventLoop.hpp (limited to 'src/AsyncEventLoop.hpp') diff --git a/src/AsyncEventLoop.hpp b/src/AsyncEventLoop.hpp new file mode 100644 index 0000000..ebe2cad --- /dev/null +++ b/src/AsyncEventLoop.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "utils.hpp" + +class AsyncEventLoop { +public: + AsyncEventLoop(); + ~AsyncEventLoop(); + + DEFINE_GETTER(getUVLoop, loop) + + template void queueTask(F &&task) { + { + std::lock_guard lock(tasksQueueMutex); + tasksQueue.push(std::forward(task)); + } + uv_async_send(&asyncHandle); + } + +protected: + void runLoop(); + void processTasks(); + static void asyncHandleCallback(uv_async_t *handle); + static void closeHandle(uv_handle_t *handle, void *arg = nullptr); + +private: + uv_loop_t *loop; + std::thread loopThread; + uv_async_t asyncHandle; + std::atomic isLoopRunning = false; + std::queue> tasksQueue; + std::mutex tasksQueueMutex; +}; -- cgit v1.3.1