X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca65c0440a7163e4e37e48b1c4329709d722db47..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/src/generic/timer.cpp diff --git a/src/generic/timer.cpp b/src/generic/timer.cpp index 24d5888cdd..406fb93634 100644 --- a/src/generic/timer.cpp +++ b/src/generic/timer.cpp @@ -142,29 +142,32 @@ void wxTimerScheduler::NotifyTimers() bool oneShot; volatile bool timerDeleted; wxTimerTick_t now = GetMillisecondsTime(); - wxTimerDesc *desc; - while ( m_timers && m_timers->shotTime <= now ) + for ( wxTimerDesc *desc = m_timers; desc; desc = desc->next ) { - desc = m_timers; - oneShot = desc->timer->IsOneShot(); - RemoveTimer(desc); - - timerDeleted = false; - desc->deleteFlag = &timerDeleted; - desc->timer->Notify(); - - if ( !timerDeleted ) + if ( desc->running && desc->shotTime <= now ) { - wxLogTrace( wxT("timer"), - wxT("notified timer %p sheduled for %") - wxTimerTickFmtSpec, - desc->timer, - wxTimerTickPrintfArg(desc->shotTime) ); - - desc->deleteFlag = NULL; - if ( !oneShot ) - QueueTimer(desc, now + desc->timer->GetInterval()); + oneShot = desc->timer->IsOneShot(); + RemoveTimer(desc); + + timerDeleted = false; + desc->deleteFlag = &timerDeleted; + desc->timer->Notify(); + + if ( !timerDeleted ) + { + wxLogTrace( wxT("timer"), + wxT("notified timer %p sheduled for %") + wxTimerTickFmtSpec, + desc->timer, + wxTimerTickPrintfArg(desc->shotTime) ); + + desc->deleteFlag = NULL; + if ( !oneShot ) + QueueTimer(desc, now + desc->timer->GetInterval()); + } + else + desc = m_timers; } } }