Recast  1
Game with custom magic
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
ThreadedChunkedTemperatureWorldUpdater.hpp
Go to the documentation of this file.
1 //
2 // Created by Oleg Morozenkov on 18.06.17.
3 //
4 
5 #ifndef RECAST_THREADEDCHUNKEDTEMPERATUREWORLDUPDATER_H
6 #define RECAST_THREADEDCHUNKEDTEMPERATUREWORLDUPDATER_H
7 
8 
9 #include <list>
10 #include <queue>
11 #include <condition_variable>
12 #include <thread>
13 #include <future>
23 
30 public:
33  std::function<std::shared_ptr<IUpdaterTemperatureWorldSemiChunkUpdatable<IUpdater>>(std::shared_ptr<ITemperatureWorldBoundable<ITemperatureWorld>>)> makeChunkUpdaterFn);
34 
36 
37  void update() override;
38 
39 protected:
40  struct ThreadData {
41  public:
42  std::shared_ptr<ITemperatureWorldChunkableObservable<ITemperatureWorldChunkableGeneratable<ITemperatureWorldChunkableMutable<ITemperatureWorldChunkable<ITemperatureWorld>>>>> world;
43  std::function<std::shared_ptr<IUpdaterTemperatureWorldSemiChunkUpdatable<IUpdater>>(std::shared_ptr<ITemperatureWorldBoundable<ITemperatureWorld>>)> makeChunkUpdaterFn;
44 
45  std::atomic<bool> isRunning;
46  std::vector<std::thread> workers;
47 
48  std::vector<std::shared_ptr<IUpdaterTemperatureWorldSemiChunkUpdatable<IUpdater>>> updaters;
49  std::mutex updatersMutex;
50 
51  std::vector<std::future<void>> tasks;
52  std::queue<std::pair<std::shared_ptr<IUpdater>, std::promise<void>>> tasksQueue;
53  std::mutex tasksQueueMutex;
54  std::condition_variable tasksQueueWait;
55  std::mutex tasksQueueWaitMutex;
56  };
57 
58  static void _work(std::shared_ptr<ThreadData> data);
59  static void _watchChunk(std::shared_ptr<ThreadData> data, std::shared_ptr<ITemperatureWorldBoundable<ITemperatureWorld>> chunk);
60 
61  std::shared_ptr<ThreadData> _data;
62 };
63 
64 
65 #endif //RECAST_THREADEDCHUNKEDTEMPERATUREWORLDUPDATER_H
static void _work(std::shared_ptr< ThreadData > data)
Definition: ThreadedChunkedTemperatureWorldUpdater.cpp:66
std::queue< std::pair< std::shared_ptr< IUpdater >, std::promise< void > > > tasksQueue
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:52
std::mutex updatersMutex
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:49
Definition: ITemperatureWorldChunkableMutable.hpp:40
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:40
void update() override
Definition: ThreadedChunkedTemperatureWorldUpdater.cpp:42
Definition: ITemperatureWorldChunkableObservable.hpp:42
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:29
Definition: ITemperatureWorldChunkableGeneratable.hpp:46
std::condition_variable tasksQueueWait
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:54
std::shared_ptr< ITemperatureWorldChunkableObservable< ITemperatureWorldChunkableGeneratable< ITemperatureWorldChunkableMutable< ITemperatureWorldChunkable< ITemperatureWorld > > > > > world
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:42
std::mutex tasksQueueWaitMutex
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:55
std::function< std::shared_ptr< IUpdaterTemperatureWorldSemiChunkUpdatable< IUpdater > >std::shared_ptr< ITemperatureWorldBoundable< ITemperatureWorld > >)> makeChunkUpdaterFn
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:43
Definition: IUpdater.hpp:13
std::vector< std::future< void > > tasks
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:51
~ThreadedChunkedTemperatureWorldUpdater()
Definition: ThreadedChunkedTemperatureWorldUpdater.cpp:28
std::shared_ptr< ThreadData > _data
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:61
std::vector< std::thread > workers
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:46
ThreadedChunkedTemperatureWorldUpdater(std::shared_ptr< ITemperatureWorldChunkableObservable< ITemperatureWorldChunkableGeneratable< ITemperatureWorldChunkableMutable< ITemperatureWorldChunkable< ITemperatureWorld >>>>> world, std::function< std::shared_ptr< IUpdaterTemperatureWorldSemiChunkUpdatable< IUpdater >>(std::shared_ptr< ITemperatureWorldBoundable< ITemperatureWorld >>)> makeChunkUpdaterFn)
Definition: ThreadedChunkedTemperatureWorldUpdater.cpp:11
std::mutex tasksQueueMutex
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:53
std::vector< std::shared_ptr< IUpdaterTemperatureWorldSemiChunkUpdatable< IUpdater > > > updaters
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:48
static void _watchChunk(std::shared_ptr< ThreadData > data, std::shared_ptr< ITemperatureWorldBoundable< ITemperatureWorld >> chunk)
Definition: ThreadedChunkedTemperatureWorldUpdater.cpp:89
std::atomic< bool > isRunning
Definition: ThreadedChunkedTemperatureWorldUpdater.hpp:45