aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/Timer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/Timer.cc')
-rw-r--r--src/FbTk/Timer.cc30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/FbTk/Timer.cc b/src/FbTk/Timer.cc
index dd736dd..eff3af4 100644
--- a/src/FbTk/Timer.cc
+++ b/src/FbTk/Timer.cc
@@ -200,31 +200,31 @@ void Timer::updateTimers(int fd) {
200 // way. to avoid problems such as infinite loops we save the current 200 // way. to avoid problems such as infinite loops we save the current
201 // (ordered) list of timers into a list and work on it. 201 // (ordered) list of timers into a list and work on it.
202 202
203 ssize_t i; 203 static std::vector<FbTk::Timer*> timeouts;
204 const ssize_t ts = s_timerlist.size();
205 std::vector<FbTk::Timer*> timers;
206 204
207 timers.reserve(ts); 205 now = FbTime::now();
208 for (it = s_timerlist.begin(); it != s_timerlist.end(); ++it ) { 206 for (it = s_timerlist.begin(); it != s_timerlist.end(); ++it ) {
209 timers.push_back(*it); 207 if (now < (*it)->getEndTime()) {
208 break;
209 }
210 timeouts.push_back(*it);
210 } 211 }
211 212
212 now = FbTime::now(); 213 size_t i;
214 const size_t ts = timeouts.size();
213 for (i = 0; i < ts; ++i) { 215 for (i = 0; i < ts; ++i) {
214 216
215 FbTk::Timer* t = timers[i]; 217 FbTk::Timer& t = *timeouts[i];
216 218
217 if (now < t->getEndTime()) { 219 t.fireTimeout();
218 break; 220 t.stop();
219 }
220 221
221 t->fireTimeout(); 222 if (! t.doOnce()) { // restart the current timer
222 t->stop(); 223 t.start();
223
224 if (! t->doOnce()) { // restart the current timer
225 t->start();
226 } 224 }
227 } 225 }
226
227 timeouts.clear();
228} 228}
229 229
230 230