U
was spricht dann gegen so etwas in der richtung:
strcut timer
{
typedef LOGNLONG tick_type;
typedef float second_type;
timer()
{
restart();
}
void restart()
{
start = get_ticks();
}
tick_type get_elapsed() const
{
tick_type stop = get_ticks();
return stop - start;
}
tick_type get_ticks_per_second() const
{
;
}
static second_type get_seconds_from_ticks(tick_type ticks, tick_type ticks_per_second)
{
return second_type(ticks)/second_type(ticks_per_second);
}
private:
tick_type start;
tick_type get_ticks() const
{
LARGE_INTEGER ret_val;
BOOL successfull = QueryPerformanceCounter(&ret_val);
if(successfull == FALSE)
{
/*backup methode wählen oder einfach exception werfen*/;
}
return ret_val.QuadPart;
}
};
int main()
{
timer t;
/*...*/
timer::second_type elapsed = timer::get_seconds(t.get_elapsed(), t.get_seconds_per_tick());
std::cout << elapsed << std::endl;
}
ist sehr lückenhaft, aber sollte doch ein wenig übersichtlicher sein
Ich weiß nicht, wozu die Backup-Methode brauchst, aber ohne die würde es noch mal ein ganzes Stück übersichtlicher werden...^^
Ich kann mir gerade nicht vorstellen, was passieren soll, dass dort nen Fehler auftritt - aber wenn, dann kann er auch in der get_elapsed fkt. auftauchen - und dann? dann hat man nämlich keine alternativ start-zeit, sondern nur die, die man dann wegwerfen kann...
also gleich beide speichern - und beide Methoden zum stoppen anbieten?
Das die Timer-Auflösung hier stimmt, sollte dich nicht veranlassen, das immer so zu berechnen!? Andere Methoden geben auch Millisekunden wieder, aber haben nur eine Auflösung von um die 16ms ( GetTickCount() ) z.Bsp.
bb