Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

32 рядки
798 B

  1. #pragma once
  2. #include <ecs/core/utils/thread_pool/pool.h>
  3. namespace ecs {
  4. namespace core {
  5. namespace utils {
  6. template<typename T_task>
  7. inline void thread_pool
  8. ::post(T_task&& task, ssize_t worker_id)
  9. {
  10. if (worker_id == -1)
  11. {
  12. _tasks.push(std::forward<T_task>(task));
  13. for (auto& w : _workers)
  14. {
  15. w->signal();
  16. }
  17. }
  18. else if (worker_id >= 1 && worker_id <= static_cast<ssize_t>(_workers.size()))
  19. {
  20. auto& w = _workers.at(static_cast<size_t>(worker_id - 1));
  21. w->post(std::forward<T_task>(task));
  22. }
  23. else
  24. {
  25. throw std::invalid_argument(std::string("invalid worker_id: ") + std::to_string(worker_id));
  26. }
  27. }
  28. } } }