Sam kiedys znalazlem ta klase kiedy szukalem sposobu na odmierzanie czasu. Tylko jest jedno ale, bo u mnie w petli glownej wykonywal sie caly program i po prostu na poczatku bylo sprawdzenie czasu czy juz nie uplynal. Powiedzmy masz while na poczatku sprawdzasz czas i lecisz dalej robisz sobie cos tam zakladam ze nie bedzie to trwalo nie wiadomo ile czasu i od nowa na poczatek sprawdzasz czas.
Ew. podepnij sie pod licznik zegara z tego co pamietam on 18 razy na sekunde jest obslugiwany przez sterownik przerwan. Dorzuc mu tam cos od siebie i tyle ;p
Zartuje oczywiscie troche to trudne i w cpp raczej niemozliwe do wykonania ;)
//////////////////////////////////////////
// class declaration:
class timer {
public:
timer();
void start();
void stop();
void reset();
bool isRunning();
unsigned long getTime();
bool isOver(unsigned long seconds);
private:
bool resetted;
bool running;
unsigned long beg;
unsigned long end;
};
//////////////////////////////////////////
// class implementation:
timer::timer() {
resetted = true;
running = false;
beg = 0;
end = 0;
}
void timer::start() {
if(! running) {
if(resetted)
beg = (unsigned long) clock();
else
beg -= end - (unsigned long) clock();
running = true;
resetted = false;
}
}
void timer::stop() {
if(running) {
end = (unsigned long) clock();
running = false;
}
}
void timer::reset() {
bool wereRunning = running;
if(wereRunning)
stop();
resetted = true;
beg = 0;
end = 0;
if(wereRunning)
start();
}
bool timer::isRunning() {
return running;
}
unsigned long timer::getTime() {
if(running)
return ((unsigned long) clock() - beg) / CLOCKS_PER_SEC;
else
return end - beg;
}
bool timer::isOver(unsigned long seconds) {
return seconds >= getTime();
}
//////////////////////////////////////////