f417b48df8
The idle queue is used to schedule tasks ... later. This code was mostly adoted from a reference TDD experiment by Josh Larson (themutatedshrimp@gmail.com). Thanks Josh! Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
50 lines
680 B
C++
50 lines
680 B
C++
/*
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
*/
|
|
#include <idle.h>
|
|
|
|
#include <queue>
|
|
|
|
static std::queue<idle :: IdleBase *> idle_queue;
|
|
static float queued = 0;
|
|
static float serviced = 0;
|
|
|
|
idle :: IdleBase :: IdleBase()
|
|
{
|
|
}
|
|
|
|
idle :: IdleBase :: ~IdleBase()
|
|
{
|
|
}
|
|
|
|
void idle :: IdleBase :: schedule()
|
|
{
|
|
idle_queue.push(this);
|
|
queued++;
|
|
}
|
|
|
|
|
|
bool idle :: run_task()
|
|
{
|
|
if (idle_queue.size() > 0) {
|
|
idle_queue.front()->run();
|
|
delete idle_queue.front();
|
|
idle_queue.pop();
|
|
serviced++;
|
|
}
|
|
|
|
if (idle_queue.size() > 0)
|
|
return true;
|
|
|
|
queued = 0;
|
|
serviced = 0;
|
|
return false;
|
|
}
|
|
|
|
float idle :: get_progress()
|
|
{
|
|
if (idle_queue.size() == 0)
|
|
return 1;
|
|
return serviced / queued;
|
|
}
|