rt300@0: // rt300@0: // timeController.cpp rt300@0: // tweakathlon rt300@0: // rt300@0: // Created by Robert Tubb on 10/02/2014. rt300@0: // rt300@0: // rt300@0: rt300@0: #include "timeController.h" rt300@0: rt300@0: TimeController timeController; rt300@0: rt300@0: rt300@0: //---------------- rt300@0: void TimeController::callAndEraseAllExpired(TimerMicrosec timeNow){ rt300@0: rt300@0: for(auto iter = timesAndCalls.begin(); iter != timesAndCalls.end(); ) { rt300@0: if ( (*iter).first < timeNow) { rt300@0: (*iter).second(); rt300@0: timesAndCalls.erase(iter++); rt300@0: } else { rt300@0: ++iter; rt300@0: } rt300@0: } rt300@0: }; rt300@0: rt300@0: //---------------- rt300@0: void TimeController::cancelEvent(TimerID which){ rt300@0: // rt300@0: for(auto it = timesAndCalls.begin(); it != timesAndCalls.end();){ rt300@0: if ((*it).first == which) { rt300@0: timesAndCalls.erase(it++); rt300@0: } else { rt300@0: ++it; rt300@0: } rt300@0: } rt300@0: rt300@0: }; rt300@0: //---------------- rt300@0: TimerID TimeController::scheduleEvent(TimerCallbackFunction cbfunc, int howLongMillisec){ rt300@0: rt300@0: TimerID fireTime = TimerID(getMicrosecTimeNow()+ 1000.0*howLongMillisec); rt300@0: timesAndCalls.insert( TimeAndCallPair(fireTime, cbfunc)); rt300@0: rt300@0: rt300@0: return fireTime; rt300@0: }; rt300@0: rt300@0: //---------------- rt300@0: void TimeController::startStopwatch(){ rt300@0: if (stopWatchRunning){ rt300@0: cout << "ERROR stop watch already running" << endl; rt300@0: } rt300@0: rt300@0: stopWatchStartTime = TimerMillisec(getMicrosecTimeNow()/1000); rt300@0: stopWatchRunning = true; rt300@0: } rt300@0: //---------------- rt300@0: TimerMillisec TimeController::stopStopwatch(){ rt300@0: if (!stopWatchRunning) return 0; rt300@0: stopWatchRunning = false; rt300@0: TimerMillisec elapsedTime = getMicrosecTimeNow()/1000 - stopWatchStartTime; rt300@0: stopWatchStartTime = 0; rt300@0: return elapsedTime; rt300@0: } rt300@0: //---------------- rt300@0: TimerMillisec TimeController::getStopwatchElapsedTime(){ rt300@0: if (!stopWatchRunning) return 0; rt300@0: TimerMillisec elapsedTime = getMicrosecTimeNow()/1000 - stopWatchStartTime; rt300@0: return elapsedTime; rt300@0: } rt300@0: //----------------