// // Created by selim on 09.05.2022. // #include "GLibMainContextExecutor.h" #include int callback(void* data) { auto executor = reinterpret_cast(data); executor->runFront(); return G_SOURCE_REMOVE; } void GLibMainContextExecutor::add(folly::Func func) { std::lock_guard lock(_mutex); _tasks.push(std::move(func)); g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, callback, this, nullptr); } void GLibMainContextExecutor::runFront() { std::lock_guard lock(_mutex); if(!_tasks.empty()) { auto task = std::move(_tasks.front()); _tasks.pop(); task(); } } folly::Executor::KeepAlive GLibMainContextExecutor::instance() { static GLibMainContextExecutor instance; return folly::getKeepAliveToken(instance); }