# timer funktionen?



## lordfritte (18. Oktober 2007)

Hallo gibt es in C timer funktionen um eine zeit in ms zu messen?
EDIT: ich habs, es geht mit clock()


----------



## lordfritte (19. Oktober 2007)

Ok es geht doch nicht, wenn ich vor der Schleife ein clock() in einem clock_t timer oder int timer speichere und ich nach der schleife mit einem clock verrechne, kommt 0 raus, weil in timer und clock() das selbe steht.


----------



## MCoder (19. Oktober 2007)

Also bei mir geht's so:

```
#include <ctime>

clock_t start, finish;
start = clock();

// ...

finish = clock();
long lResult = finish - start;
```
/EDIT:
Um wirklich Millisekunden zu erhalten, sollte man lieber sowas schreiben:

```
double dResult = (static_cast<double>(finish - start)) / CLOCKS_PER_SEC * 1000.0;
```
Gruß
MCoder


----------



## lordfritte (19. Oktober 2007)

Danke, kann man eigentlich auch irgendwie in nano sekunden zählen?


----------



## RedWing (19. Oktober 2007)

Hallo,

Nanosekunden genau vlt. nicht gerade, aber wenn du eine x86 Architektur besitzt, dann könnte man über inline assembler den TSC der CPU auslesen. Das ist ein 64 Bit Register welches die Anzahl der Zyklen seit Start der CPU zählt. Diesen Wert teilst du durch die Taktrate bzw Frequenz deines Prozessors und hast somit die Zeit die vergangen ist seit dem Start deiner CPU. Die Auflösung hängt dabei logischerweise von der Taktrate deines Prozessors ab.
Wie das mit dem Inline Assembler funktioniert hängt stark von dem von dir verwendeten Compiler ab.

Gruß,
RedWing


----------



## MCoder (19. Oktober 2007)

Suche mal nach dem Stichwort "High Resolution Timer". Ich hab's selber noch nicht verwendet, habe aber dunkel in Erinnerung, dass es bei Windows da API-Funktionen für gibt. Genauigkeit und Auflösung sind allerdings systemabhängig (Hardware).

Gruß
MCoder


----------



## lordfritte (19. Oktober 2007)

RedWing hat gesagt.:


> Hallo,
> 
> Nanosekunden genau vlt. nicht gerade, aber wenn du eine x86 Architektur besitzt, dann könnte man über inline assembler den TSC der CPU auslesen. Das ist ein 64 Bit Register welches die Anzahl der Zyklen seit Start der CPU zählt. Diesen Wert teilst du durch die Taktrate bzw Frequenz deines Prozessors und hast somit die Zeit die vergangen ist seit dem Start deiner CPU. Die Auflösung hängt dabei logischerweise von der Taktrate deines Prozessors ab.
> Wie das mit dem Inline Assembler funktioniert hängt stark von dem von dir verwendeten Compiler ab.
> ...



Das habe ich schon versucht, dass ist mir aber zu unzuverlissig, da kommt alles raus nur nicht das was rauskommen soll.


----------



## lordfritte (21. November 2007)

Gibt es nichts fertiges?
Wie z.b. timer_start() und timer_end() und timer_end() gibt aus wie viel Nanosekunden zwischen timer_end() und timer_end() vergangen sind?


----------

