/** * Pops and returns the next thread from the thread queue * @return A pointer to the next ready thread */ static Thread* PopNextReadyThread() { Thread* next; Thread* thread = GetCurrentThread(); if (thread && thread->status == THREADSTATUS_RUNNING) { // We have to do better than the current thread. // This call returns null when that's not possible. next = ready_queue.pop_first_better(thread->current_priority); } else { next = ready_queue.pop_first(); } return next; }
/// Gets the next thread that is ready to be run by priority Thread* NextThread() { Handle next; Thread* cur = GetCurrentThread(); if (cur && cur->IsRunning()) { next = g_thread_ready_queue.pop_first_better(cur->current_priority); } else { next = g_thread_ready_queue.pop_first(); } if (next == 0) { return nullptr; } return Kernel::g_object_pool.GetFast<Thread>(next); }