Wie kann man Zeit in C messen?
- Einleitung zur Zeitmessung in C
- Die Funktion clock()
- Messung der echten (Wand-)Zeit
- Zeitmessung unter Windows
- Beispiel mit clock()
- Fazit
Einleitung zur Zeitmessung in C
Die Messung von Zeitintervallen ist in vielen C-Programmen essenziell, sei es zur Performanceanalyse, zur Steuerung von Abläufen oder zur Synchronisation. Die Programmiersprache C bietet dafür verschiedene Möglichkeiten, abhängig von der Genauigkeit, der Art der Zeitmessung und dem verwendeten Betriebssystem.
Die Funktion clock()
Die Standardbibliothek von C enthält die Funktion clock(), die die Prozesszeit misst, also die Zeit, die der Prozessor für das aktuelle Programm aufwendet. Sie liefert einen Wert vom Typ clock_t, der die Anzahl der "Ticks" seit Programmstart enthält. Durch Division mit CLOCKS_PER_SEC lässt sich die Prozesszeit in Sekunden umrechnen. Allerdings misst clock() nicht die reale verstrichene Zeit, sondern nur die Zeit, in der das Programm aktiv gerechnet hat.
Messung der echten (Wand-)Zeit
Möchte man die reale verstrichene Zeit messen, um etwa die Laufzeit von Funktionen oder Programmen zu bestimmen, sind andere Methoden notwendig. Unter POSIX-kompatiblen Systemen (wie Linux) stellt die Funktion gettimeofday() oder clock_gettime() präzisere Werkzeuge bereit. gettimeofday() liefert die Zeit seit der Epoche (1. Januar 1970) in Sekunden und Mikrosekunden, clock_gettime() kann je nach Einstellung Nanosekundenauflösung erreichen und verschiedenen Arten von Zeit (reale Zeit, monotone Zeit, Prozesszeit, etc.) abfragen.
Zeitmessung unter Windows
Windows bietet eigene API-Funktionen zur Zeitmessung, etwa QueryPerformanceCounter() und QueryPerformanceFrequency(), um hohe Auflösung der Zeitmessung zu ermöglichen. Diese Funktionen sind in der Windows-API definiert und erlauben eine sehr genaue Messung von Zeitintervallen.
Beispiel mit clock()
Ein einfaches Beispiel für die Zeitmessung mit clock() zeigt, wie man die benötigte Prozesszeit für einen Programmabschnitt bestimmen kann. Dabei wird vor und nach dem Codeblock die aktuelle Prozesszeit erfasst und die Differenz ermittelt. Die Umrechnung in Sekunden erfolgt durch Division mit CLOCKS_PER_SEC. Diese Methode eignet sich gut, wenn ausschließlich die CPU-Zeit gemessen werden soll.
Fazit
Die Messung von Zeit in C hängt stark davon ab, welche Art von Zeit benötigt wird – Prozesszeit oder reale Zeit – und von der Plattform, auf der das Programm läuft. clock() ist plattformübergreifend, aber nicht immer genau für reale Zeitmessung. Für präzisere Messungen unter Linux empfiehlt sich clock_gettime() und unter Windows die entsprechenden APIs. Durch diese Funktionen lässt sich eine genaue und flexible Zeitmessung in C umsetzen.
