Avatar billede astengaard Nybegynder
27. maj 2001 - 18:26 Der er 8 kommentarer og
1 løsning

Tidstagning i c++

Hejsa!

Hvordan kan man smartest tage tid på en opgave i C++?
Jeg har en test, der skal udføres og vil gerne vide hvor lang tid det har taget præcist.
Avatar billede wwc Nybegynder
27. maj 2001 - 20:25 #1
Øhhh hvad mener du?
Er det noget kode du vil tage tid på hvor lang tid tager?
eller bare tage tid?
Avatar billede astengaard Nybegynder
27. maj 2001 - 20:33 #2
Jeg vil gerne tage tid på noget kode. Jeg skal lave nogle sammenlignende tests af c++ og Java, så jeg skal vide præcis, hvor lang tid det tager at udføre en stump kode.
Avatar billede reanimator Nybegynder
27. maj 2001 - 21:34 #3
Hej astengaard.
Det nemmeste er, vist du gemmer systemets tid i en variabel, når programmet startes. Det vil sige det første du gør i din main funktion.
Før programmet afsluttes, tager du systemets tid en gang mere. Det eneste du så skal gøre er, at finde tidsforskellen.
Avatar billede astengaard Nybegynder
27. maj 2001 - 21:38 #4
Og hvordan gør jeg helt præcis det??
Avatar billede nebula Nybegynder
28. maj 2001 - 01:48 #5
Præcist? I sekunder eller mindre?

sekunderne kan du gøre således:
#include <ctime>
time_t start_time;

time(&start_time) // starten af opgaven (før)
difftime(time(0), start_time) // i slutningen/efter opgaven (etv. gem den i en variabel).

så du antal sekunder mellem de 2 kald.

Skal det være mere præcist kan du bruge:
clock_t t1_start, t1_slut;
t1_start = clock();
// opgaven der ønskes tidstagning på
t1_slut = clock();
t1 = ((double)(t1_slut - t1_start) / CLOCKS_PER_SEC);
Avatar billede borrisholt Novice
28. maj 2001 - 08:30 #6
jeg vil anbefale dig det følgende :

LARGE_INTEGER StartTime;
LARGE_INTEGER EndTime;
LARGE_INTEGER Frequency;

QueryPerformanceFrequency(&StartTime);
//do your stuff
QueryPerformanceFrequency(&EndTime);
QueryPerformanceFrequency(&Frequency);

du kan så beregne tiden der er brugt  ved at beregne (EndTime-StartTime) / Frequency. Du får svaret i sekunder.

Jens B http://fotx.net/borrisholt
Avatar billede astengaard Nybegynder
28. maj 2001 - 20:04 #7
Nu har jeg været ved at lege lidt med clock().
Arbejder den ikke i milisekunder, det synes jeg alle mine tests viser??
Avatar billede nebula Nybegynder
28. maj 2001 - 21:21 #8
Jo.
Avatar billede borrisholt Novice
29. maj 2001 - 09:50 #9
Jeg har nosset i det i mit eksempel ... Det burde Stå

LARGE_INTEGER StartTime;
LARGE_INTEGER EndTime;
LARGE_INTEGER Frequency;

QueryPerformanceCounter(&StartTime);
//do your stuff
QueryPerformanceCounter(&EndTime);
QueryPerformanceFrequency(&Frequency);

det giver en meget høj nøjagtighed meget mere en millisekunder. Og så er det nemt at bruge.

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester