k_thread_queue.h 1016 B

123456789101112131415161718192021222324252627282930313233
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "core/hle/kernel/k_scheduler.h"
  5. #include "core/hle/kernel/k_thread.h"
  6. namespace Kernel {
  7. class KThreadQueue {
  8. public:
  9. explicit KThreadQueue(KernelCore& kernel_) : kernel{kernel_} {}
  10. virtual ~KThreadQueue() = default;
  11. virtual void NotifyAvailable(KThread* waiting_thread, KSynchronizationObject* signaled_object,
  12. Result wait_result);
  13. virtual void EndWait(KThread* waiting_thread, Result wait_result);
  14. virtual void CancelWait(KThread* waiting_thread, Result wait_result, bool cancel_timer_task);
  15. private:
  16. KernelCore& kernel;
  17. KThread::WaiterList wait_list{};
  18. };
  19. class KThreadQueueWithoutEndWait : public KThreadQueue {
  20. public:
  21. explicit KThreadQueueWithoutEndWait(KernelCore& kernel_) : KThreadQueue(kernel_) {}
  22. void EndWait(KThread* waiting_thread, Result wait_result) override final;
  23. };
  24. } // namespace Kernel