Cee Function clock
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Eine Standard-Funktion der SpracheCee (Motivation siehe MegaThread).
| #include <time.h>
clock_t clock(void); |
|
|
Die clock-Funktion bestimmt die gebrauchte Prozessor-Zeit
Der Rückgabewert der clock-Funktion ist ein möglichst genauer Wert für die bisher gebrauchte Prozessor-Zeit relativ zu einem Zeitpunkt, über den man lange streiten kann :-)
Einigkeit besteht hoffentlich über die Verwendung:
| clock_t tmpclk, zeit;
double sekunden;
tmpclk=clock();
tu_irgendwas();
zeit=clock()-tmpclk;
sekunden = zeit/(double)CLOCKS_PER_SEC; |
|
|
Falls clock() keinen verwendbaren Wert ermitteln kann, wird
(clock_t) -1 zurückgegeben. -- PatrickKursawe?
Kleine Variante (C99):
| double time_begin = (double) clock();
/* Eigentlicher Programmcode */
...
double time_end = (double) clock();
printf("The elapsed time is %f seconds\n",
(time_end - time_begin) / (double) CLOCKS_PER_SEC); |
|
|
Die Darstellung dieser unscheinbaren Funktion wirft einige zusätzliche Themen auf:
- Jeder SoftwareEntwickler hat zumindest gelegentlich das Bedürfnis für eine solche ZeitMessung?. Wahrscheinlich ist es ein GrundbedürfnisDesSoftwareEntwicklers?. Warum ist es in fast allen Programmiersprachen so mühsam, eine optimale ZeitMessung? durchzuführen?
- Welche Wege stehen dem SoftwareEntwickler wirklich offen, wenn er eine möglichst genaue ZeitMessung? benötigt? Leider geht es hier wahrscheinlich nicht ohne SystemSpezifischeZeitMessung?.
- Oben steht "möglichst genauer Wert". Das ist offenbar das Papier nicht Wert, auf dem es steht. Z. B. liefert auf einem PC diese Funktion normalerweise den TimerTick (hat also eine Auflösung von ca. 50 ms). Dagegen liefert der zugrundeliegende Counter einen Takt von ca. 0.001 ms, den man natürlich schon seit Beginn der PC-Zeitrechnung auf die verschiedensten systemspezifischen Arten auslesen konnte, der aber AFAIK nie den Eingang in auch nur eine clock-Implementierung gefunden hat.
- Wie steht man als SoftwareEntwickler zum CeeStandard: akzeptierend, kritisch, distanziert?
- Wie kann man DenCeeStandardVerstehen?? Als sakrosankte Bibel? Als mühsames Kompromissdokument, in dem gerade die Dinge nicht dargestellt sind, die man zum tieferen Verständnis benötigen würde?
- Ich anerkenne den C-Standard als das, was er ist: Ein standardisierendes Dokument, das sich weit überwiegend an Compiler- und Library-Entwickler wendet. Der Standard ist ein stark kompromißbehaftetes, 'ängstliches' Dokument, geschrieben in einer Art juristischen Sprache, oftmals viel zu knapp und mißinterpretierbar, heterogen und durchsetzt von vielen angeflickt wirkenden Fußnoten.
- Zum Lernen und Nachschlagen ist K&R2 viel besser geeignet, zum Informieren über Funktionen sind Manuals viel besser geeignet.
- Leider wird der Standard mißbraucht, oft als heilige Bibel angesehen - und prompt mißverstanden oder aus religiösen Gründen blind verteidigt.
- Ich hätte clock() folgendermaßen beschrieben:
| Die Funktion clock() gestattet die Messung einer Zeitdauer
zwischen zwei ihrer Aufrufe.
Der Wert eines vorhergehenden Aufrufes ist vom Wert
des jeweils aktuellen Aufrufes zu subtrahieren.
Gemessen wird die dem aufrufenden Programm zugeteilte CPU-Zeit.
Der gelieferte Wert eines ersten Aufrufes kann bereits
eine korrekte und verwendbare Zeitdauer seit Start des Programms sein,
dies wäre aber implementations-spezifisch.
Die Konstante CLOCKS_PER_SEC ist ein Divisor, um einen Zeitwert
in Sekunden [s] herzustellen.
Der Rückgabewert (clock_t)-1 zeigt ein Fehlschlagen an.
Die Auflösung der retournierten Werte muß besser oder gleich 1 Sekunde sein.
Die Konstante CLK_TCK gibt die Auflösung in [1/s] an.
Hinweise: sleep(n) [n>0] 'verbraucht' hier *keine* Zeit! (Unix)
Man beachte den Zahlenbereich von clock_t hinsichtlich Überlauf. |
|
|
- Auf DOS-basierten Multitasking-Systemen mit i80186/20MHz-Prozessor und ohne implementierte RTC ist heutzutage eine durchgehende Auflösung von 1 ms realisiert. Angesichts dessen ist das Angebot auf 'richtigen' Computern zum Lachen. Pentium-CPUs haben einen 64Bit-Counter eingebaut, der eine Auflösung von etwa 1 ns hat und erst nach mehreren 100 Jahren überläuft.
- Wünschenswert und machbar sind: sleep, msleep, delay, clock, timer, mit Auflösungen: s, ms, <=ms, <=ms, <=ms.
- Übrigens sind Funktionen, die eine RTC (Uhrzeit/Datum) benutzen, eine ganz andere Kategorie!
Hier reicht eine Auflösung von 1 s durchaus aus. --HelmutSchellong
KategorieC KategorieCee
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 29. November 2007 8:28 (diff))