#pragma once #include #include #include #include #include #include #include "utils/logger.h" class AsyncExecutor { public: static void pushForDelete(GuiElement *element) { if (!instance) { instance = new AsyncExecutor(); } instance->pushForDeleteInternal(element); } static void execute(std::function func) { if (!instance) { instance = new AsyncExecutor(); } instance->executeInternal(func); } static void destroyInstance() { if (instance) { delete instance; instance = nullptr; } } private: static AsyncExecutor *instance; AsyncExecutor(); ~AsyncExecutor(); void pushForDeleteInternal(GuiElement *element); void executeInternal(std::function func); std::recursive_mutex mutex; std::thread *thread; volatile bool exitThread = false; std::vector> elements; std::recursive_mutex deleteListMutex; std::queue deleteList; };