Forum: PC-Programmierung Zeiten unter 1 Sekunde in ANSI-C messen


von C-Programmier-Versucher (Gast)


Lesenswert?

Hallo!

Ich probrammiere eine Software, welche sowohl unter Windows wie auch 
unter Linux kompiliert werden können sollte. Deshalb verwende ich nur 
ANSI-C-Bibliotheken.
Nun brauche ich einige Funktionen, mit denen ich Zeiten messen kann. 
Dazu gibt es z.B. die time.h, die liefert aber nur eine Auflösung von 1 
Sekunde. Ich bräuchte etwas wo die Auslösung grösser ist. Muss nicht 
wahnsinnig genau sein, es soll nur entschieden werden können, ob ein 
Timeout aufgetreten ist (also z.B. T_neu > T_alt + 20 Millisekunden). Es 
macht also nichts wenn es nicht bis auf die letzte Millisekunde stimmt. 
Weiss da jemand etwas?

Vielen Dank!

von Karl H. (kbuchegg)


Lesenswert?

Sieh dir die Funktion clock() mal an.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da sollte es die Funktion clock geben. Die gibt einen Wert zurück, der 
auf CLOCKS_PER_SEC Bruchteile einer Sekunde genau ist.

Wie hoch dieser Wert ist, ist implementierungsabhängig.

Beides (der Prototyp von clock und die Konstante CLOCKS_PER_SEC) 
steht in time.h.

Auf Win32 ist CLOCKS_PER_SEC üblicherweise 1000.

von Thomas B. (Firma: Druckerei Beste) (virtupic)


Lesenswert?

ANSI-C... Schade eigentlich. Unter Unix gibt es die Funktion 
"gettimeofday", die dir die Uhrzeit mit 1 us Auflösung liefert. Ist aber 
leider nicht ANSI-C.

virtuPIC

von C-Programmier-Versucher (Gast)


Lesenswert?

Hat wunderbar geklappt, habt vielen Dank.
BTW, was passiert wenn ich dies auf einem Mikrocontroller ausführen 
würde? Wenn wir ja schon in einem Mikrocontrollerforum sind. Gehe ich 
richtig in der Annahme, dass es da im Allgemeinen nicht funkionieren 
wird, weil sich der Compiler nicht selbständig an den Timern zu schaffen 
macht? Oder wird die Zeit auf eine andere Zeit gemessen? Hat ein 
PC-Prozessor auch so Timer wie ein Mikrocontroller? Fragen über 
Fragen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sicher hat ein µC Timer, aber die C-Runtime-Umgebung für einen µC 
enthält i.d.R. keine einzige der Funktionen aus time.h.

Ein PC-Prozessor selbst hat keine Timer (wenn man mal die "performance 
counter" neuerer Prozessoren ignoriert), aber die sind, wie auch die 
ganze andere Peripherie, "off-chip" in der Umgebungselektronik 
("Chipsatz") untergebracht. Die Standard-PC-Architektur verwendet hier 
den Timerbaustein i8254, der natürlich in jedem PC aus diesem 
Jahrtausend nur noch als IP-Core irgendwo im Chipsatz herumdümpelt.

von C-Programmier-Versucher (Gast)


Lesenswert?

OK, wieder was gelernt, vielen Dank!!

von Rolf Magnus (Gast)


Lesenswert?

> Die Standard-PC-Architektur verwendet hier den Timerbaustein i8254, der
> natürlich in jedem PC aus diesem Jahrtausend nur noch als IP-Core
> irgendwo im Chipsatz herumdümpelt.

Aktuelle Systeme verwenden eher den HPET.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.