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