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

43 lines
1014 B
C++
Raw Normal View History

2025-11-22 17:21:45 +01:00
#include "common.h"
#include "TaskQueue.h"
void TaskQueueBase::ThreadMain(TaskBase** queue, u32 queueLength)
{
while (true)
{
_idle = false;
u32 readPtr = _queueReadPtr;
while (readPtr != _queueWritePtr)
{
TaskBase* task = queue[readPtr];
if (readPtr == queueLength - 1)
readPtr = 0;
else
readPtr++;
_queueReadPtr = readPtr;
if (!task)
continue;
task->Execute();
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;
}
}