You've already forked pico-launcher
mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-01-09 16:28:48 -08:00
43 lines
1014 B
C++
43 lines
1014 B
C++
#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;
|
|
}
|
|
} |