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());
+ desc = m_timers;
+ 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());
+ }
}
}
}