Zeitmessen unter C
-
Hi, hoffe das ich jetzt hier richtig bin. Habe meine ganzen Aufgaben erledigt und woran es gerade scheitert ist das ich die Zeit messen will zwischen 2 stellen.
float a,b,c; a=gettimeofday(2); erzeugen_einer_Datei(); beschreiben_ohne_Sync(); b=gettimeofday(2); c=a-b; printf("%f /n", c);
Das sollte mir doch eigentlich die Differenz ausgegeben. Ich kriege aber immer Werte unter 1 raus?! Kann mir da mal jemand sagen was daran falshc ist, bin sicher ist wieder eine sonne kleine Sache an der es gerade scheitert
Gruss
-
kann es sein, dass du gettimeofday falsch aufrufst? du musst dem doch 2 pointer auf structs mitgeben und float als rückgabewert kann irgendwie auch nicht stimmen.
-
Wenn du halbwegs genau die Zeit messen willst, dann nimm am besten QueryPerformanceCounter. Zum Beispiel so:
//Klassenmember LARGE_INTEGER m_liFrequency; LARGE_INTEGER m_liEnd; LARGE_INTEGER m_liStart; //Methoden void CMyDlg::MeasureHPTimeStart() { if (!QueryPerformanceFrequency(&m_liFrequency)){ //error } if (!QueryPerformanceCounter(&m_liStart)){ //error } } void CMyDlg::MeasureHPTimeEnd() { if (!QueryPerformanceCounter(&m_liEnd)){ //error }else{ int dwPerfElapsed; dwPerfElapsed=(int)(((m_liEnd.QuadPart - m_liStart.QuadPart) * 1000) / m_liFrequency.QuadPart); char s[128]; sprintf_s(s,"%ims",dwPerfElapsed); m_ctlStaticSnapshotDuration.SetWindowText(s); } }
EDIT: Upps, das ist ja gar nicht das WinAPI-Forum...
-
Hi,
richtig heissts:#include <sys/time.h> int gettimeofday(struct timeval *zeit, void *tzp);
Wahrswcheinlich impliziert dein COmpiler einen reinterpret_cast daraus (Siehe IEE Darstellung von floating pointer integern).
mfg, Hans
-
_matze schrieb:
Wenn du halbwegs genau die Zeit messen willst, dann nimm am besten QueryPerformanceCounter.
...
Upps, das ist ja gar nicht das WinAPI-Forum...wenn du halbwegs genau die zeit messen willst dann nimm RDTSC
upps, das ist ja gar nicht das x86-forumGolem86 schrieb:
Wahrswcheinlich impliziert dein COmpiler einen reinterpret_cast daraus
wie? einen was? nö, also sowas macht der bestimmt nicht.
-
rdtsc ist zwar die eizig wahre Zeitmessfunktion
(ist auch ganz leicht in inline-asm zu implementieren), aber ich glaube, dass er eher die Zeit in ms und nicht in Clockcycles messen will (BTW: Geht das überhaupt auf anderen Architekturen, z.B. PPC?)Also mit reinterpret_cast meine ich letztendlich die inkorrekte Umwandlung von int zu float (wegen Überlauf). Ein Teil des ints könnte in nicht für den Wert vorgesehene Bereiche rutschen.
Googelt man nach reinterpret_cast und versucht das ganze nochmal mit double, da ist mehr Platz .mfg, Hans
:schland: