Zeitfunktionen |
Die Zeitfunktionen gehören nicht zu den C++-Bibliotheken, sondern sind ein Erbstück von C. Eigentlich stammt dieser Bereich aus den Betriebssystemfunktionen von UNIX. Sie sind aber mit der Sprache C auf die anderen Systeme mit hinübergeschwappt. Von dort gerieten die Funktionen in den ANSI-Standard für C und sind damit systemübergreifend nutzbar, was vor allem beim Wechsel des Betriebssystems oder des Compilers und bei der Entwicklung portabler Software von großem Nutzen ist.
#include <time.h> time_t time(time_t *t);
Als Parameter können Sie entweder die Adresse einer Variable vom Typ time_t angeben, in der Sie dann das Ergebnis der Funktion vorfinden, oder einfach 0 verwenden und dann den Rückgabewert in einer Variablen ablegen. Da die wenigsten Menschen mit der Zahl der Sekunden seit dem 1.1.1970 umgehen können, gibt es hilfreiche Umrechnungsfunktionen. Mit der Funktion localtime() können Sie anhand einer Variablen vom Typ time_t eine Struktur namens tm füllen. Diese Struktur enthält Elemente für die Bestandteile des Datums und der Uhrzeit.
#include <time.h> struct tm *localtime(const time_t *timer);
struct tm {
int tm_sec; /* Sekunden - [0,61] */
int tm_min; /* Minuten - [0,59] */
int tm_hour; /* Stunden - [0,23] */
int tm_mday; /* Tag des Monats - [1,31] */
int tm_mon; /* Monat im Jahr - [0,11] */
int tm_year; /* Jahr seit 1900 */
int tm_wday; /* Tage seit Sonntag (Wochentag) - [0,6] */
int tm_yday; /* Tage seit Neujahr (1.1.) - [0,365] */
int tm_isdst; /* Sommerzeit-Flag */
}
[Zeitansage]
#include <iostream>
using namespace std;
#include <time.h>
int main()
{
time_t Zeitstempel;
tm *nun;
Zeitstempel = time(0);
nun = localtime(&Zeitstempel);
cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
<< nun->tm_year+1900 << " - " << nun->tm_hour
<< ':' << nun->tm_min << endl;
}
#include <time.h> char *asctime(const struct tm *t); char *ctime(const time_t *timep);
#include <sys/time.h> int gettimeofday(struct timeval *zeit, void *tzp);
Die Datenstruktur des ersten Parameters enthält die Sekunden und Mikrosekunden und ist folgendermaßen definiert:
struct timeval {
unsigned long tv_sec; /* Sekunden seit dem 1.1.1970 */
long tv_usec; /* und Mikrosekunden */
};
Der zweite Parameter war ursprünglich für die Zeitzone vorgesehen. Allerdings hat sich die Umsetzung der verschiedenen Sommerzeitregeln als nicht so einfach erwiesen, sodass Sie als zweiten Parameter am besten 0 angeben.
[Laufzeitermittlung]
#include <iostream>
using namespace std;
#include <sys/time.h>
int main()
{
timeval start, end;
gettimeofday(&start, 0);
...
gettimeofday(&end, 0);
cout << start.tv_sec << ':' << start.tv_usec << endl;
cout << end.tv_sec << ':' << end.tv_usec << endl;
}
#include <time.h> clock_t clock(void);
Das folgende Programm zeigt, wie die CPU-Zeit gemessen wird. Zu Anfang wird ein Startwert gemessen, da nicht unbedingt garantiert ist, dass nicht schon Ticks gezählt wurden. Am Ende wird der Wert erneut gemessen. Das Programm zeigt auch die Konstante CLOCKS_PER_SEC an. Bei POSIX-Systemen sollte sie immer 1.000.000 betragen.
[CPU-Messung]
#include <iostream>
using namespace std;
#include <time.h>
int main()
{
clock_t start, end;
start = clock();
...
end = clock();
cout << start << endl;
cout << end << ':' << CLOCKS_PER_SEC << endl;
}
|
Diese Seite basiert auf Inhalten aus dem Buch
Arnold Willemer: Einstieg in C++ Mit freundlicher Genehmigung und Unterstützung des Verlags galileo computing |
| Informatik-Ecke Einstieg in C++ |
(C) Copyright 2005 Arnold Willemer
|