core/idle: Replace C++ queue with a glib queue

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-11-10 14:08:11 -05:00
parent 8474ff1907
commit 284e3466f4
1 changed files with 15 additions and 15 deletions

View File

@ -3,7 +3,7 @@
*/ */
#include <core/idle.h> #include <core/idle.h>
#include <queue> #include <glib.h>
struct idle_task { struct idle_task {
@ -11,8 +11,7 @@ struct idle_task {
void *idle_data; void *idle_data;
}; };
static GQueue idle_queue = G_QUEUE_INIT;
static std::queue<struct idle_task *> idle_queue;
static float queued = 0.0; static float queued = 0.0;
static float serviced = 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_func = func;
task->idle_data = data; task->idle_data = data;
idle_queue.push(task); g_queue_push_tail(&idle_queue, task);
queued++; queued++;
} }
bool idle_run_task() bool idle_run_task()
{ {
if (idle_queue.size() > 0) { struct idle_task *task;
idle_queue.front()->idle_func(idle_queue.front()->idle_data);
delete idle_queue.front(); if (g_queue_get_length(&idle_queue) > 0) {
idle_queue.pop(); task = (struct idle_task *)g_queue_pop_head(&idle_queue);
task->idle_func(task->idle_data);
delete task;
serviced++; serviced++;
} }
if (idle_queue.size() > 0) if (g_queue_is_empty(&idle_queue)) {
return true; queued = 0.0;
serviced = 0.0;
queued = 0.0; }
serviced = 0.0; return !g_queue_is_empty(&idle_queue);
return false;
} }
float idle_progress() float idle_progress()
{ {
if (idle_queue.size() == 0) if (g_queue_is_empty(&idle_queue))
return 1.0; return 1.0;
return serviced / queued; return serviced / queued;
} }