asyncUpdate.cpp
Engine/source/platform/async/asyncUpdate.cpp
Detailed Description
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2012 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23 24#include "platform/async/asyncUpdate.h" 25#include "core/stream/tStream.h" 26 27 28//----------------------------------------------------------------------------- 29// AsyncUpdateList implementation. 30//----------------------------------------------------------------------------- 31 32void AsyncUpdateList::process( S32 timeOut ) 33{ 34 U32 endTime = 0; 35 if( timeOut != -1 ) 36 endTime = Platform::getRealMilliseconds() + timeOut; 37 38 // Flush the process list. 39 40 IPolled* ptr; 41 IPolled* firstProcessedPtr = 0; 42 43 while( mUpdateList.tryPopFront( ptr ) ) 44 { 45 if( ptr == firstProcessedPtr ) 46 { 47 // We've wrapped around. Stop. 48 49 mUpdateList.pushFront( ptr ); 50 break; 51 } 52 53 if( ptr->update() ) 54 { 55 mUpdateList.pushBack( ptr ); 56 57 if( !firstProcessedPtr ) 58 firstProcessedPtr = ptr; 59 } 60 61 // Stop if we have exceeded our processing time budget. 62 63 if( timeOut != -1 64 && Platform::getRealMilliseconds() >= endTime ) 65 break; 66 } 67} 68 69//-------------------------------------------------------------------------- 70// AsyncUpdateThread implementation. 71//-------------------------------------------------------------------------- 72 73void AsyncUpdateThread::run( void* ) 74{ 75 _setName( getName() ); 76 77 while( !checkForStop() ) 78 { 79 _waitForEventAndReset(); 80 81 if( !checkForStop() ) 82 mUpdateList->process(); 83 } 84} 85