Timer optimizations.

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@371 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
cjp 2003-11-28 19:08:25 +00:00
parent 5b391a7097
commit e6de6c2e6f

View File

@ -95,19 +95,32 @@ void FGAPIENTRY glutIdleFunc( void (* callback)( void ) )
void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ),
int timerID ) int timerID )
{ {
SFG_Timer* timer; SFG_Timer *timer, *node;
freeglut_assert_ready; freeglut_assert_ready;
timer = (SFG_Timer *)calloc( sizeof(SFG_Timer), 1 ); if( (timer = fgState.FreeTimers.Last) )
if( !timer ) {
fgListRemove( &fgState.FreeTimers, &timer->Node );
}
else
{
if( ! (timer = malloc(sizeof(SFG_Timer))) )
fgError( "Fatal error: " fgError( "Fatal error: "
"Memory allocation failure in glutTimerFunc()\n" ); "Memory allocation failure in glutTimerFunc()\n" );
}
timer->Callback = callback; timer->Callback = callback;
timer->ID = timerID; timer->ID = timerID;
timer->TriggerTime = fgElapsedTime() + timeOut; timer->TriggerTime = fgElapsedTime() + timeOut;
fgListAppend( &fgState.Timers, &timer->Node );
for( node = fgState.Timers.First; node; node = node->Node.Next )
{
if( node->TriggerTime > timer->TriggerTime )
break;
}
fgListInsert( &fgState.Timers, &node->Node, &timer->Node );
} }
/* /*