コード例 #1
0
ファイル: MapManager.cpp プロジェクト: Trizzor/uecore
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);
}
コード例 #2
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);
}
コード例 #3
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);
}
コード例 #4
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);
}