die zeit auslesen genauer als sekunde
-
DEvent schrieb:
mit clock kann man ja die dauer eines vorgangs auf millisekunden ganau anzeigen lassen, aber ich brauche den Zeitpunkt besser als sekundengenau.
Bei Microsoft gibt den QueryPerformanceCounter. Andere, ebenso genaue kenn ich nicht, dürfte es aber entsprechende libs dazu geben.
-
das QPC unter Win kenn ich.
ich brauch aber den Zeitpunkt und nicht die dauer.
oder meint ihr ich soll mir eine klasse basteln, die QPC benutzt, und die dann jede Millisekunde eine variable hochzählt, die ich dann zu der systemuhr addiere ?
also z.b. 12h:00m:00s + 100msok danke
-
volkard schrieb:
__asm rdtsc! ist taktgenau.
Hmm, wie funktioniert das eigentlich? Kostet die Anweisung nicht schon einen Takt? Was läuft da ab?
-
randa schrieb:
volkard schrieb:
__asm rdtsc! ist taktgenau.
Hmm, wie funktioniert das eigentlich?
die cpu zählt intern einfach alle taktimpulse mit (in einem 64-bit zähler). wird alles in hardware gemacht. das lesen des wertes geht bestimmt irre schnell. 1 takt oder so.
-
kostet die addition eines zählers mit 1 nicht auch takte?
-
randa schrieb:
kostet die addition eines zählers mit 1 nicht auch takte?
nee, innerhalb der cpu läuft vieles parallel ab. ein taktimpuls kann viele aktionen gleichzeitig bewirken.
-
so ist das also. cool
-
hm
damit kriegt man wohl den counterunsigned long v1, v2; _asm{ rdtsc mov [v1], eax mov [v2], edx }
ist das plattformunabhängig ? oder besser, ist das hardwareunabhängig ?
-
DEvent schrieb:
hm
damit kriegt man wohl den counterunsigned long v1, v2; _asm{ rdtsc mov [v1], eax mov [v2], edx }
ist das plattformunabhängig ? oder besser, ist das hardwareunabhängig ?
ab pentium eht das.
also nix mit 486-er und nix mit ganz fremden cpus.
-
wieso geht das aber net ??
typedef union Clicks { struct { unsigned long v1, v2; } werte; long long v; } Clicks; Clicks clicks; _asm{ rdtsc mov [clicks.werte.v1], eax mov [clicks.werte.v2], edx }
mein union müsste doch 64 bit sein, und die v1, v2 je 32 bit
wieso steht dann operand size mismatch ? ich benutzt BCB6.0Edit: Der Union ist 64 Bit, habs grad mit sizeof nachgemessen
-
klappt unter dem BCB60 nicht einfach
inline __int64 rdtsc(){ _asm rdtsc; }
den weiteren kram mit unions und so (falls nötig) würde ich dann in reinem c++ machen.