Files
pico-launcher/arm9/source/core/task/TaskQueue.cpp

42 lines
917 B
C++

#include "common.h"
#include "TaskQueue.h"
void TaskQueueBase::ThreadMain()
{
while (true)
{
_idle = false;
while (true)
{
u32 irqs = rtos_disableIrqs();
auto task = _taskList.GetHead();
if (!task)
{
rtos_restoreIrqs(irqs);
break;
}
_taskList.Remove(task);
task->Execute(irqs);
if (task->GetDestroyWhenComplete())
{
// this will destroy the task
ReturnOwnership(task);
}
}
if (_endThreadWhenDone)
return;
_idle = true;
rtos_waitEvent(&_event, false, true);
}
}
void QueueTaskBase::Dispose()
{
if (_task)
{
TaskBase* task = _task;
_task = nullptr;
_taskQueue->ReturnOwnership(task);
_taskQueue = nullptr;
}
}