aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/MapUpdater.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Maps/MapUpdater.h')
-rw-r--r--src/server/game/Maps/MapUpdater.h48
1 files changed, 37 insertions, 11 deletions
diff --git a/src/server/game/Maps/MapUpdater.h b/src/server/game/Maps/MapUpdater.h
index 89798026339..c499110173e 100644
--- a/src/server/game/Maps/MapUpdater.h
+++ b/src/server/game/Maps/MapUpdater.h
@@ -1,11 +1,31 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
#ifndef _MAP_UPDATER_H_INCLUDED
#define _MAP_UPDATER_H_INCLUDED
-#include <ace/Thread_Mutex.h>
-#include <ace/Condition_Thread_Mutex.h>
-
-#include "DelayExecutor.h"
+#include "Define.h"
+#include <mutex>
+#include <thread>
+#include <condition_variable>
+#include "ProducerConsumerQueue.h"
+class MapUpdateRequest;
class Map;
class MapUpdater
@@ -17,24 +37,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;
- ACE_Thread_Mutex m_mutex;
- ACE_Condition_Thread_Mutex m_condition;
+ 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