void MapManager::Update(uint32 diff) { i_timer.Update(diff); if( !i_timer.Passed() ) return; int i = 0; MapMapType::iterator iter; std::vector<Map*> update_queue(i_maps.size()); omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS)); for(iter = i_maps.begin(), i = 0; iter != i_maps.end(); ++iter, ++i) update_queue[i] = iter->second; /* gomp in gcc <4.4 version cannot parallelise loops using random access iterators so until gcc 4.4 isnt standard, we need the update_queue workaround */ // Parallelize map updates. #pragma omp parallel for schedule(dynamic) private(i) shared(update_queue) for(int i = 0; i < i_maps.size(); ++i) { checkAndCorrectGridStatesArray(); // debugging code, should be deleted some day update_queue[i]->Update(i_timer.GetCurrent()); } ObjectAccessor::Instance().Update(i_timer.GetCurrent()); for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); i_timer.SetCurrent(0); }
void MapManager::Update(uint32 diff) { i_timer.Update(diff); if (!i_timer.Passed()) return; for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter) { if (m_updater.activated()) m_updater.schedule_update(*iter->second, i_timer.GetCurrent()); else { iter->second->Update(i_timer.GetCurrent()); } } if (m_updater.activated()) m_updater.wait(); checkAndCorrectGridStatesArray(); for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); i_timer.SetCurrent(0); }
void MapManager::Update(uint32 diff) { i_timer.Update(diff); if( !i_timer.Passed() ) return; #ifdef MULTI_THREAD_MAP uint32 i=0; MapMapType::iterator iter; std::vector<Map*> update_queue(i_maps.size()); int omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS)); for(iter = i_maps.begin(), i=0;iter != i_maps.end(); ++iter, i++) update_queue[i]=iter->second; /* gomp in gcc <4.4 version cannot parallelise loops using random access iterators so until gcc 4.4 isnt standard, we need the update_queue workaround */ #pragma omp parallel for schedule(dynamic) private(i) shared(update_queue) for(int32 i = 0; i < i_maps.size(); ++i) { checkAndCorrectGridStatesArray(); // debugging code, should be deleted some day update_queue[i]->Update(i_timer.GetCurrent()); sWorld.RecordTimeDiff("UpdateMap %u", update_queue[i]->GetId()); // sLog.outError("This is thread %d out of %d threads,updating map %u",omp_get_thread_num(),omp_get_num_threads(),iter->second->GetId()); } #else for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter) { iter->second->Update(i_timer.GetCurrent()); sWorld.RecordTimeDiff("UpdateMap %u", iter->second->GetId()); } #endif for(MapMapType::iterator iter = i_maps.begin(); iter != i_maps.end(); ++iter) iter->second->DelayedUpdate(i_timer.GetCurrent()); ObjectAccessor::Instance().Update(i_timer.GetCurrent()); sWorld.RecordTimeDiff("UpdateObjectAccessor"); for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); sWorld.RecordTimeDiff("UpdateTransports"); i_timer.SetCurrent(0); }
void MapManager::Update(uint32 diff) { i_timer.Update(diff); if( !i_timer.Passed() ) return; for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter) { checkAndCorrectGridStatesArray(); // debugging code, should be deleted some day iter->second->Update((uint32)i_timer.GetCurrent()); } for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); i_timer.SetCurrent(0); }