void GlobalEventQueue::Cycle( ncycle_t steps ) { EventQueue *nextEventQueue; ncycle_t iterationSteps = 0; while( iterationSteps < steps ) { ncycle_t nextEvent = GetNextEvent( &nextEventQueue ); ncycle_t globalQueueSteps = 0; if( nextEvent > currentCycle ) { globalQueueSteps = nextEvent - currentCycle; } /* Next event occurs after the current number of steps. */ if( globalQueueSteps > (steps - iterationSteps)) { currentCycle += steps - iterationSteps; Sync( ); break; } ncycle_t localQueueSteps = nextEventQueue->GetNextEvent( ) - nextEventQueue->GetCurrentCycle( ); nextEventQueue->Loop( localQueueSteps ); currentCycle += globalQueueSteps; iterationSteps += globalQueueSteps; Sync( ); } }