aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/MapUpdater.h
diff options
context:
space:
mode:
authorleak <leak@bitmx.net>2014-07-02 00:41:30 +0200
committerleak <leak@bitmx.net>2014-07-02 00:41:30 +0200
commit25e633aa34ef227841b4092270d862b0864dc372 (patch)
treeddbc654fed3dc969dac57c32338e7a501354823e /src/server/game/Maps/MapUpdater.h
parentf8e829da65c41cb753cec6cd9c59ae8a65434bce (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.h21
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