diff --git a/core/idle.cpp b/core/idle.cpp index 7f60cf8e..45a87f42 100644 --- a/core/idle.cpp +++ b/core/idle.cpp @@ -3,7 +3,7 @@ */ #include -#include +#include struct idle_task { @@ -11,8 +11,7 @@ struct idle_task { void *idle_data; }; - -static std::queue idle_queue; +static GQueue idle_queue = G_QUEUE_INIT; static float queued = 0.0; static float serviced = 0.0; @@ -23,30 +22,31 @@ void idle_schedule(void (*func)(void *), void *data) task->idle_func = func; task->idle_data = data; - idle_queue.push(task); + g_queue_push_tail(&idle_queue, task); queued++; } bool idle_run_task() { - if (idle_queue.size() > 0) { - idle_queue.front()->idle_func(idle_queue.front()->idle_data); - delete idle_queue.front(); - idle_queue.pop(); + struct idle_task *task; + + if (g_queue_get_length(&idle_queue) > 0) { + task = (struct idle_task *)g_queue_pop_head(&idle_queue); + task->idle_func(task->idle_data); + delete task; serviced++; } - if (idle_queue.size() > 0) - return true; - - queued = 0.0; - serviced = 0.0; - return false; + if (g_queue_is_empty(&idle_queue)) { + queued = 0.0; + serviced = 0.0; + } + return !g_queue_is_empty(&idle_queue); } float idle_progress() { - if (idle_queue.size() == 0) + if (g_queue_is_empty(&idle_queue)) return 1.0; return serviced / queued; }