Tread GENAU 1 Millisekunde warten lassen, wie ?
-
So gehts:
// ***** Sleep 5ms ***** SYSTEMTIME sysTimeStart, sysTimeEnd; GetSystemTime( &sysTimeStart ); do { memset( &sysTimeEnd, 0, sizeof( SYSTEMTIME ) ); GetSystemTime( &sysTimeEnd ); } while( ( ( sysTimeEnd.wHour * 60 * 60 * 1000 ) + ( sysTimeEnd.wMinute * 60 * 1000 ) + ( sysTimeEnd.wSecond * 1000 ) + sysTimeEnd.wMilliseconds ) < ( ( sysTimeStart.wHour * 60 * 60 * 1000 ) + ( sysTimeStart.wMinute * 60 * 1000 ) + ( sysTimeStart.wSecond * 1000 ) + sysTimeStart.wMilliseconds + 5 ) ); lCounter += 5;Danke nochmal.
Gruß Tobi.
-
rofl wie schlecht, das geht viel einfacher
-
Nimm besser GetTickCount
-
Nimm besser QueryPerformanceCounter
-
@T0bi: timeBeginPeriod + timeGetTime sollte einfacher sein. Reicht für 5ms Auflösung auch.
-
GetTickCount hab ich auch shcon versucht, doch irgendwie spinnt das manchmal nen bissel rum, außdem wurde mir Systemtime empfohlen und ich habs benutzt und nun kommt ihr Klugscheißer an und meint es geht noch einfacher xD, rückt doch gleich mit der Antwort raus *g*
Ich lass das jetzt so, so gehts jedenfalls .
-
und was ist wenn jemand zwischen den aufrufen die systemzeit zurückstellt?
-
Genau so ganz rein zufällig, gell?
Und was ist, wenn ich timeGetTime ect. benutze und ganz rein zufällig 49.71Tage vergangen sind und alles auf 0 zurück gesetzt wird?
-
Und was ist, wenn ich timeGetTime ect. benutze und ganz rein zufällig 49.71Tage vergangen sind und alles auf 0 zurück gesetzt wird?
wenn mans richtig macht, gibts da keine probleme
-
-
Auf die Gefahr hin, dass du unbelehrbar bist:
(1) Um auf 1ms warten zu können, brauchst du eine Uhr, die deutlich genauer als 1 ms auflöst. Zum Beispiel wenn du eine Uhr hast, die 3mal in 2ms tickt, wie willst du dann eine ms warten können? Die genaueste Uhr unter Windows ist der PerformanceCounter und im ms-Bereich würde ich den schon hernehmen. Weiterhin ist der Counter nicht zyklisch (außer nach ein paar Millionen Jahren) und du hast die damit verbundenen Probleme nicht.
(2) Du kannst nur mindestens 1 ms warten, ob das OS dich dann rechnen lässt, darauf hast du keinen Einfluss. 1 ms ist für ein Nicht-RT-OS schon schwierig, da eine Zeitscheibe normal so um die 10ms beträgt [1, 2]. Das heißt, wenn ein anderer Prozess rechnen will, kommst du 10ms oder länger mal einfach gar nicht dran.
(3) Rechne in deinem Programm damit, dass die 1ms nicht immer eingehalten wird und reagiere vernünftig darauf.
[1] http://widefox.pbwiki.com/Scheduler
[2] http://technet.microsoft.com/en-us/magazine/cc162494.aspx