time_t t0, t1; /* time_t is defined on <time.h> and <sys/types.h> as long */ clock_t c0, c1; /* clock_t is defined on <time.h> and <sys/types.h> as int */ long count; double a, b, c; t0 = time(NULL); c0 = clock();
time() tæller kun sekunder. clock() har en noget finere opløsning, defineret ved konstanten CLOCKS_PER_SEC. Det er sikkert platformsafhængigt, men på Windows/Visual C++ 6.0 er CLOCKS_PER_SEC = 1000 . Dvs den opløsning du ønsker.
Vær opmærksom på, at disse funktioner giver den tid der faktisk er gået. I et multitasking system er det ikke det samme som den tid processen bruger. Kan man iøvrigt måle den ???
gettimeofday er ikke ANSI standard. Der er ingen standard funktioner der garanterer større opløsning end 1 sec. Selv om gettimeofday angiver tiden i usec tvivler jeg på at den har så stor opløsning.
ANSI C specificerer ikke noget om multitasking. På windows kan man bruge GetThreadTimes(...) til at måle den tid en tråd har brugt. Jeg kender ingen funktion der gør det samme på unix/linux (det betyder ikke at der ikke er en).
time standard: ANSI measurement : wall time unit: ikke bestemt ifølge standard alle systemer jeg kender er det 1 sekund accuracy: ikke bestemt ifølge standard alle systemer jeg kender er det 1 sekund
clock standard: ANSI measurement : CPU time unit: bestemt af CLOCKS_PER_SECOND ifølge ANSI altid 1/1000000 ifølge POSIX accuracy: hardware & OS dependent
gettimeofday standard: common Unix measurement : wall time unit : 1 mikro sekund accuracy : hardware & OS dependent
Husk at fordi unit er 1/1000000 sekund, så behøver den jo ikke at have den accuracy (altså blive øget med 1 hver /1000000 sekund - det kan godt være den øges med 100 hver 1/10000 sekund).
Mine tre windows compilere (Microsoft Visual C++, Borland Builder og cygwin-gcc) har alle CLOCKS_PER_SEC til at være 1000. I de gode gamle DOS-dage var CLOCKS_PER_SEC 18.2
Hverken Windows eller DOS har nogensinde hævdet at være POSIX compliant.
Citat fra bits/time.h (included af time.h) på min Linux box:
/* ISO/IEC 9899:1990 7.12.1: <time.h> The macro `CLOCKS_PER_SEC' is the number per second of the value returned by the `clock' function. */ /* CAE XSH, Issue 4, Version 2: <time.h> The value of CLOCKS_PER_SEC is required to be 1 million on all XSI-conformant systems. */ # define CLOCKS_PER_SEC 1000000l
# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ # include <bits/types.h> extern long int __sysconf (int); # define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.