diff options
author | leak <leak@bitmx.net> | 2014-07-02 00:41:30 +0200 |
---|---|---|
committer | leak <leak@bitmx.net> | 2014-07-02 00:41:30 +0200 |
commit | 25e633aa34ef227841b4092270d862b0864dc372 (patch) | |
tree | ddbc654fed3dc969dac57c32338e7a501354823e /src/server/game/Maps/MapUpdater.h | |
parent | f8e829da65c41cb753cec6cd9c59ae8a65434bce (diff) |
Replaced ACE_Method_Request based DelayExecutor by PCQ impl
Untested due to worldserver still breaking because of ACE threading fails
Diffstat (limited to 'src/server/game/Maps/MapUpdater.h')
-rw-r--r-- | src/server/game/Maps/MapUpdater.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/server/game/Maps/MapUpdater.h b/src/server/game/Maps/MapUpdater.h index 8461b53e992..ff1d85a23e9 100644 --- a/src/server/game/Maps/MapUpdater.h +++ b/src/server/game/Maps/MapUpdater.h @@ -19,10 +19,11 @@ #ifndef _MAP_UPDATER_H_INCLUDED #define _MAP_UPDATER_H_INCLUDED +#include "Define.h" #include <mutex> +#include <thread> #include <condition_variable> - -#include "DelayExecutor.h" +#include "ProducerConsumerQueue.h" class Map; @@ -35,24 +36,30 @@ class MapUpdater friend class MapUpdateRequest; - int schedule_update(Map& map, ACE_UINT32 diff); + void schedule_update(Map& map, uint32 diff); - int wait(); + void wait(); - int activate(size_t num_threads); + void activate(size_t num_threads); - int deactivate(); + void deactivate(); bool activated(); private: - DelayExecutor m_executor; + ProducerConsumerQueue <MapUpdateRequest*> _queue; + + std::vector<std::thread> _workerThreads; + std::atomic_bool _cancelationToken; + std::mutex _lock; std::condition_variable _condition; size_t pending_requests; void update_finished(); + + void WorkerThread(); }; #endif //_MAP_UPDATER_H_INCLUDED |