Z
Hallo MadaraUchia,
hier sind erstmal die verfügbaren Timer:
Das Betriebsystem stellt mehrere Zeitgeber mit verschiedenen Genauigkeitsstufen zur Verfügung:
Funktion Einheit Genauigkeit
---------------------------------------------------------------------------
Now, Time, Timer Sekunden 1 Sekunde
GetTickCount Millisekunden ca. 10 ms
TimeGetTime Millisekunden ca. 10 ms
QueryPerformanceCounter QueryPerformanceFrequency gleich
Beitrag aus Support.Microsoft-Seite.
Hier meine QueryPerformanceCounter-Klasse. Hoffe, du verstehst sie.
Für eine Umnwaldung von double in int wurde die System lib benutzt.
class Time
{
private: LONGLONG g_frequenz, g_startpunkt, g_letztemessung;
private: int temp;
///Speichert die Zeitdifferenz Zwischen startpunkt und letzter Messung.
/** Wird nach Aufruf von SetStart und GetFrequenz, Messe, sowie
Vergleiche befüllt. */
private: double dTimeDiff;
///Liest die derzeitige Frequenz aus.
/** Wird von SetStart ausgelesen, damit die aktuelle Frequenz benutzt wird nicht bei Objekterstellung.
@ return g_frequenz*/
private: void Time::GetFrequenz()
{
QueryPerformanceFrequency((LARGE_INTEGER*)&g_frequenz);
}
///Speichert die derzeitige Tickzahl.
/** @return g_letztemessung */
private: void Time::Messe()
{
QueryPerformanceCounter((LARGE_INTEGER*)&g_letztemessung);
}
///Errechnet dTimeDiff
/** Nimmt die Differenz zweier Ticker und teilt sie durch die Frequenz, die ein Tick braucht,
um die Zeitdifferenz in Sekunden auszugeben.
@param g_startpunkt 1.Messpunkt
@param g_letztemessung 2. Messpunkt
@param g_frequenz Frequenz pro Tick
@return dTimeDiff*/
public: void Vergleiche()
{
dTimeDiff = (((double)(g_letztemessung-g_startpunkt))/((double)g_frequenz));
}
///Setzt g_startpunkt
/** @return g_startpunkt */
public: void Time::SetStart()
{
GetFrequenz();
QueryPerformanceCounter((LARGE_INTEGER*)&g_startpunkt);
}
///Schaut ob schon "Zeitdifferenz" verstrichen ist.
/** Nach Aufruf von SetStart benutzbar. Vergleicht Startzeit mit jetziger Zeit.
@param SetStart();
@return Zeitdifferenz schon verstrichen. */
public: bool Timer(double Wartezeit)
{
Messe();
Vergleiche();
if(Wartezeit<dTimeDiff)
return true;
else
return false;
}
///Gibt die Zeitdifferenz zwischen startpunkt und Jetziger Zeit aus.
/** Nach Aufruf von SetStart benutzbar. Vergleicht Starzeit mit jetziger Zeit und gibt Zeitdifferenz zurück.
@param SetStart muss aufgerufen worden sein.
@return dTimeDiff Zeitdifferenz*/
//Gibt Zeit in double-aus.
public: double GetTimeDiff()
{
Messe();
Vergleiche();
return dTimeDiff;
}
//Gibt Zeit in Sekunden aus.
public: int Get1_1SecForAufruf()
{
Messe();
Vergleiche();
temp = System::Convert::ToInt64(GetTimeDiff());
return temp;
}
//Aktualisiere, Get1_1Sec, Get1_10Sec und Get1_100Sec sind für
//meinen Timer, der bei mir 3 Stellen hat. die erste für Sekunden,
//die zweite für 1/10 Sekunden, die dritte für 1/100 Sekunden. Bevor
//die Get-Funktionen aufgerufen werden dürfen, muss immer mit
//Aktualisiere die Aktuelle Zeit ausgelesen werden.
public: void Aktualisiere()
{
Messe();
Vergleiche();
temp = System::Convert::ToInt64(dTimeDiff*100);
}
public: int Get1_1Sec()
{
return temp/100;
}
public: int Get1_10Sec()
{
return (temp%100)/10;
}
public: int Get1_100Sec()
{
return (temp%10)/1;
}
///Legt den Startpunkt fest.
/** Wird dazu verwendet, den Startpunkt nach dem Laden neu zu setzen. */
public: void SetTimeDifferenz(int Diff)
{
Messe();
g_startpunkt=g_letztemessung-Diff*g_frequenz;
}
};