void Timers::Execute() { timeval curTime; gettimeofday(&curTime, 0); for (Timer* s = m_firstTimer; s != 0; s = m_firstTimer) { if (CompareTimevals(s->GetNextExecution(), curTime)) break; TimerCbk_t cbk = s->GetCallback(); void* userdata = s->GetUserdata(); s->Update(); int remainingReps = s->GetRemainingRepetitions(); cbk(userdata); if (FindTimer(s)) { DeleteFromList(s); if (remainingReps == 0) delete s; else InsertTimer(s); } } }