Advertisement
denesik

ThreadProcess

Apr 6th, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. template<class Worker, class Task>
  2. class ThreadProcess
  3. {
  4. public:
  5.   // Количество потоков, количество воркеров.
  6.   ThreadProcess(size_t thread_count, size_t worker_count);
  7.   // Добавить задачу на выполнение.
  8.   void Push(Task &&task);
  9.  
  10.   void Update();
  11. };
  12.  
  13. class TaskSectorLoader
  14. {
  15. public:
  16.   TaskSectorLoader(World &world, const SPos &pos)
  17.     : m_world(world), m_pos(pos)
  18.   {};
  19.  
  20.   // Вызывается перед началом загрузки.
  21.   // Тут можно загрузить воркер данными.
  22.   void BeginEvent(MapLoader &worker)
  23.   {
  24.     // Ищем в мире сектор, отправляем его в воркер.
  25.     // Скорей всего увеличиваем счетчик ссылок у данного сектора, что бы он не удалился из мира.
  26.   }
  27.  
  28.   // Вызывается когда загрузка закончена.
  29.   // Тут можно достать из воркера нужные данные.
  30.   void EndEvent(MapLoader &worker)
  31.   {
  32.     // Уменьшаем счетчик ссылок для сектора с позицией m_pos;
  33.   }
  34.  
  35. private:  
  36.   World &m_world;
  37.   SPos m_pos;
  38. }
  39.  
  40. в мире:
  41. ThreadProcess<MapLoader, TaskSectorLoader> mThreadProcess;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement