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

52 lines
1.0 KiB
C++

#include "common.h"
#include "Task.h"
void TaskBase::RequestCancel()
{
u32 irqs = rtos_disableIrqs();
_cancelRequested = true;
if (_state == TaskState::NotStarted)
{
_state = TaskState::Canceled;
rtos_wakeupQueue(&_threadQueue);
}
rtos_restoreIrqs(irqs);
}
void TaskBase::Execute(u32 irqs)
{
if (_state == TaskState::NotStarted)
{
_state = TaskState::Running;
rtos_restoreIrqs(irqs);
TaskState finalState = ExecuteDirect();
SetFinalState(finalState);
}
else
{
rtos_restoreIrqs(irqs);
}
}
void TaskBase::SetFinalState(TaskState finalState)
{
u32 irqs = rtos_disableIrqs();
if (_state == TaskState::Running)
{
_state = finalState;
rtos_wakeupQueue(&_threadQueue);
}
rtos_restoreIrqs(irqs);
}
bool TaskBase::Wait()
{
u32 irq = rtos_disableIrqs();
if (!IsCompleted())
rtos_queueThread(rtos_getCurThread(), &_threadQueue);
rtos_restoreIrqs(irq);
return IsCompletedSuccessfully();
}