libsaria: Add tasks to the front and back of the queue
Queueing a task to run immediately can be useful, especially if it's something like saving data as part of a "checkpoint"
This commit is contained in:
parent
a97da1dd05
commit
517faceb99
|
@ -11,5 +11,6 @@ class IdleTask
|
|||
|
||||
int libsaria_idle_task();
|
||||
int libsaria_queue_task(IdleTask *);
|
||||
int libsaria_queue_task_front(IdleTask *);
|
||||
|
||||
#endif /* LIBSARIA_IDLE_H */
|
||||
|
|
|
@ -18,10 +18,20 @@ int libsaria_idle_task()
|
|||
* goes from size is increased from 0 to 1. This will tell
|
||||
* the UI that idle tasks have been queued.
|
||||
*/
|
||||
int libsaria_queue_task(IdleTask *task)
|
||||
static int libsaria_queue_task_generic(IdleTask *task, bool front)
|
||||
{
|
||||
int queue_size = idle.queue_task(task);
|
||||
int queue_size = idle.queue_task(task, front);
|
||||
if (queue_size == 1)
|
||||
trigger_callback(IDLE_TASK_QUEUED);
|
||||
return queue_size;
|
||||
}
|
||||
|
||||
int libsaria_queue_task(IdleTask *task)
|
||||
{
|
||||
return libsaria_queue_task_generic(task, false);
|
||||
}
|
||||
|
||||
int libsaria_queue_task_front(IdleTask *task)
|
||||
{
|
||||
return libsaria_queue_task_generic(task, true);
|
||||
}
|
||||
|
|
|
@ -15,14 +15,17 @@ int Idle::run_task()
|
|||
if (idle_queue.size() == 0)
|
||||
return idle_queue.size();
|
||||
task = idle_queue.front();
|
||||
idle_queue.pop();
|
||||
idle_queue.pop_front();
|
||||
task->run_task();
|
||||
delete task;
|
||||
return idle_queue.size();
|
||||
}
|
||||
|
||||
int Idle::queue_task(IdleTask *task)
|
||||
int Idle::queue_task(IdleTask *task, bool front)
|
||||
{
|
||||
idle_queue.push(task);
|
||||
if (front == true)
|
||||
idle_queue.push_front(task);
|
||||
else
|
||||
idle_queue.push_back(task);
|
||||
return idle_queue.size();
|
||||
}
|
||||
|
|
|
@ -9,14 +9,14 @@ using namespace std;
|
|||
class Idle
|
||||
{
|
||||
private:
|
||||
queue<IdleTask*> idle_queue;
|
||||
deque<IdleTask*> idle_queue;
|
||||
|
||||
public:
|
||||
Idle();
|
||||
~Idle();
|
||||
|
||||
int run_task();
|
||||
int queue_task(IdleTask *);
|
||||
int queue_task(IdleTask *, bool);
|
||||
};
|
||||
|
||||
#endif /* LIBSARIA_IDLE_COMPONENT_H */
|
||||
|
|
Loading…
Reference in New Issue