Millisekunden aus der Echtzeituhr in VC++
-
Hallo,
weiß vielleicht jemand ob ich irgendwie Millisekunden aus der Echtzeituhr bekomme? Ich denke die Frage ist nicht ganz klar und eindeutig. Ich weiß dass folgendes die Sekunden zurückliefert:
#include <time.h> [...] cout << time(NULL);Aber woher bekomme ich denn Millisekunden???
Das ganze soll eine Zeitverzögerung geben in der noch weiter Abfragen geschehen können. Z.B. eine Position eines Zeichens soll sich in bestimmten Zeitabständen ( möglichst auf "schnellen" wie "langsamen" Rechnern gleich groß ) verändern. Wärend der Zeitverzögerung sollen aber noch z.B. Eingaben möglich sein. Desswegen kommt so etwas wie sleep() nicht in Frage. Genausowenig wie ein Zähler der in windige Höhen zählt ( das habe ich zwar im Moment laufen, funktioniert auch ganz nett, nur auf einem anderen PC läuft das Programm dann völlig anders ).
Nun, lange Rede kurzer Sinn
:
Ist da jemandem eine Funktion ( oder eine Möglichkeit ) in VC++ bekannt die mir von der Echtzeituhr die Millisekunden zurückliefert?Vielen Dank schonmal,
Gruß, T
-
Hallo,
schau dir mal in der MSDN QueryPerformanceCounter() und QueryPerformanceFrequency() an.
Und nochn Tipp: nimm __int64 und caste den Zeiger darauf in ein LARGE_INTEGER für die aufrufe, so kannst du dann bequem mit nem __int64 arbeiten.
-
schau dir mal in der MSDN QueryPerformanceCounter() und QueryPerformanceFrequency() an.
Wird allerdings imho nicht von jedem System unterstützt...
-
Jo, aber da der tote Link speziell nach VC++ gefragt hat und das im MFC Forum, gehe ich davon aus, dass er sich dabei auf Windows beschränkt.

-
Logisch. Trottel, ich!

-
UM WIEDER AUF DIE AUSGANGSFRAGE ZURÜCKZUKEHREN:
Wie wäre es denn mit folgendem Code
int MILLISECONDS = ...; int nClkEnd = clock() + (MILLISECONDS * CLOCKS_PER_SEC / 1000); while (clock() < nClkEnd);Erklärung, falls notwendig:
clock() * CLOCKS_PER_SEC ergibt die Zeit in Sekunden, in der der aktuelle Prozess läuft. Der Term (MILLISECONDS * CLOCKS_PER_SEC / 1000)
wandelt die Zeit (Millisekunden), die du als Pause definierst in clocks um.Die Schleife wartet, bis die definierte Zeit überwunden ist. Allerdings sind hiermit Pausen von 1 oder 5 (..) Millisekunden nicht möglich, da CLOCKS_PER_SEC nicht groß genug ist. Pausen im "Centi"-Sekunden-Bereich müssten aber sehr gut möglich sein!

-
Aus unserer Reihe: "Besser spät als nie", hier einen Dank an euch alle. ( Danke das ich euch soviel Mühe gemacht habe
)Ich habe hier aus der letzten Antwort etwas übernommen, was mir zumindest auf meinem Notebook so ziemlich genau Millisekunden zu liefern schein. Also diese clock() Funktion.
#include <ctime> #include <iostream> using namespace std; #define CLS system("cls"); int main () { int puffer; puffer = clock(); while ( 1 ) { if ( puffer != clock() ) { CLS; cout << "Zeit: " << clock() << "\n"; puffer = clock(); } } return 0; }Jetzt habe ich mal in der MSDN nachgesehen und werde leider nicht so recht schlau daraus. Liefert nun clock() tatsächlich Millisekunden oder ist das hier reiner Zufall?
Zählt clock() vielleicht sowas wie Taktzyklen
( Es musste ja noch eine dumme Frage kommen!
)Gruß, T
-
Naja, das einzige, was ich weiß, ist halt, dass
clock() / CLOCKS_PER_SEC (kleiner Fehler in meinem vorigen Beitrag)die Zeit in Sekunden angibt.
-
Hmm.. Also dies hier liefert auch die Sekunden:
#include <ctime> #include <iostream> using namespace std; #define CLS system("cls"); int main () { int puffer; puffer = time(NULL); while ( 1 ) { if ( puffer != time(NULL) ) { CLS; cout << "Zeit: " << time(NULL) << "\n"; puffer = time(NULL); } } return 0; }Kannst ja mal ausprobieren...

Und dies hier scheint ziemlich gut Millisekunden wiederzugeben:
#include <ctime> #include <iostream> using namespace std; #define CLS system("cls"); int main () { int puffer; puffer = clock(); while ( 1 ) { if ( puffer != clock() ) { CLS; cout << "Zeit: " << clock() << "\n"; puffer = clock(); } } return 0; }Mich würde echt mal interessieren ob das auch auf langsameren und schnelleren Rechnern gleich läuft. Damit wäre dann mein Problem gelöst.
Hoffentlich!Im Moment läuft das hier auf einem 1500 Centrino.

Gruß, T