thread_worker.h 672 B

123456789101112131415161718192021222324252627282930
  1. // Copyright 2020 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <atomic>
  6. #include <functional>
  7. #include <mutex>
  8. #include <string>
  9. #include <vector>
  10. #include <queue>
  11. namespace Common {
  12. class ThreadWorker final {
  13. public:
  14. explicit ThreadWorker(std::size_t num_workers, const std::string& name);
  15. ~ThreadWorker();
  16. void QueueWork(std::function<void()>&& work);
  17. private:
  18. std::vector<std::thread> threads;
  19. std::queue<std::function<void()>> requests;
  20. std::mutex queue_mutex;
  21. std::condition_variable condition;
  22. std::atomic_bool stop{};
  23. };
  24. } // namespace Common