BEISPIELE/b342.c: #include <time.h> #include <sys/time.h> #include <stdio.h> #include <unistd.h> main() { { /*************************************************************************/ /* - Variante 1 - mit Bibliotheksfunktion clock() */ /* - clock() liefert die vom Programm bisher benutzte Prozessorzeit */ /* - der Teiler CLOCKS_PER_SEC ist maschinenabhängig und spezifiziert, */ /* wieviel Uhr-Ticks auf der jeweiligen Maschine pro Sekunde vergehen */ /* - CLOCKS_PER_SEC definiert also die clock_t-Einheiten pro Sekunde */ /* - bei Linux (i[345..]86 glibc): #define CLOCKS_PER_SEC 1000000 */ /*************************************************************************/ int i; float z; clock_t begin, end; printf("Variante 1 - mit clock(3) \n\n"); begin = clock(); for(i=1; i<100000000;i++); end = clock(); printf("begin: %d\n", begin); printf("end: %d\n", end); printf("clocks zwischen begin und end: %d\n", end - begin); z=end - begin; z/=CLOCKS_PER_SEC; printf("Zeit zwischen begin und end: %f Sekunden\n", z); printf("CLOCKS_PER_SEC: %d\n", CLOCKS_PER_SEC); } { /*************************************************************************/ /* - Variante 2 - mit Systemruf gettimeofday() */ /* - gettimeofday() stellt u.a. die Struktur timeval bereit */ /* struct timeval { */ /* long tv_sec; Sekunden seit 1.1.1970 */ /* long tv_usec; Mikrosekunden */ /* }; */ /*************************************************************************/ struct timeval begin, end; long seconds, useconds; int i; printf("\n\nVariante 2 - mit gettimeofday(2) \n\n"); /* Test mit for-Schleife */ if (gettimeofday(&begin,(struct timezone *)0)) { fprintf(stderr, "can not get time\n"); exit(1); } for(i=1; i<100000000;i++); if (gettimeofday(&end,(struct timezone *)0)) { fprintf(stderr, "can not get time\n"); exit(1); } printf("begin: %d sec %d usec\n", begin.tv_sec, begin.tv_usec); printf("end: %d sec %d usec\n", end.tv_sec, end.tv_usec); seconds = end.tv_sec - begin.tv_sec; useconds = end.tv_usec - begin.tv_usec; if(useconds < 0) { useconds += 1000000; seconds--; } printf("Dauer der for-Schleife: %d sec %d usec\n\n", seconds, useconds); /* Test mit sleep() */ if (gettimeofday(&begin,(struct timezone *)0)) { fprintf(stderr, "can not get time\n"); exit(1); } sleep(5); if (gettimeofday(&end,(struct timezone *)0)) { fprintf(stderr, "can not get time\n"); exit(1); } printf("begin: %d sec %d usec\n", begin.tv_sec, begin.tv_usec); printf("end: %d sec %d usec\n", end.tv_sec, end.tv_usec); seconds = end.tv_sec - begin.tv_sec; useconds = end.tv_usec - begin.tv_usec; if(useconds < 0) { useconds += 1000000; seconds--; } printf("Dauer sleep(5): %d sec %d usec\n", seconds, useconds); } return 0; } |