Avatar billede arriva Nybegynder
03. december 2003 - 14:54 Der er 8 kommentarer og
2 løsninger

Tage tid på funktion

Hey eksperter!
Jeg skal bruge noget der kan tage tid på en løkke, nærmerer bestemt noget sortering (bubblesort og quicksort)... Præcistionen skal være i millisekunder, og mener derfor ikke jeg kan bruge time.h ?

På forhånd tak..
Avatar billede arne_v Ekspert
03. december 2003 - 15:06 #1
Tid i millisekunder er system specifik.

På Windows kal du kalde GetLocalTime og få en SYSTEMTIME tilbage som
indeholder millisekunder.

På Linux kan du kalde gettimeofday og få en struct timeval som også
indeholder millisekunder.
Avatar billede arne_v Ekspert
03. december 2003 - 15:07 #2
Iøvrigt bør du hvis den test skal være noget som helst værd lade den køre så
længe (evt. ved at genetage) at sekunder er nok !
Avatar billede segmose Nybegynder
03. december 2003 - 17:01 #3
Hvis det skal være så nøjagtigt så skal du nok overveje forskellen på vægtid (den du kan aflæse externt og med de nævnte funktioner) og processtid (den tid processen rent faktiskt har fået lov at køre for dit operativ system, hvilket er nogle andre kald).
Avatar billede narrr Nybegynder
03. december 2003 - 17:32 #4
Kan man ikke bruge clock() fra <ctime> ?
Noget i retning af:
---
long start = clock();
//kør din funktion
long stop = clock()-start;
---

Nu skulle stop gerne indeholde det antal millisekunder funktionen har taget. Man kan også bruge GetTickCount() i stedet for clock(), hvis det altså er windows.
Avatar billede arne_v Ekspert
03. december 2003 - 17:36 #5
clock returnerer en clock_t og der er en konstant CLOCKS_PER_SECOND
til at markere enheden. Og den er typisk 1000000 - ikke 1000.
Avatar billede arne_v Ekspert
03. december 2003 - 17:38 #6
Men det er måske en bedre mulighed, da den angiver forbrug af CPU tid
ikke total tid (forskellen kommer hvis andre processer på maskinen også
bruger CPU).
Avatar billede arriva Nybegynder
03. december 2003 - 19:20 #7
tak for svarerne... jeg har kikket lidt på clock(), og umiddelbart ser det da ud til at det giver et output i millisekunder... passer det ikke nogenlunde med at der går 28100 ms på 28,1 sekunder?

Skal dog lige overveje jeres kommentare om hvorvidt der skal tælles processtid eller realtid...
Avatar billede arriva Nybegynder
03. december 2003 - 19:22 #8
tjekkede i øvrigt lige CLOCKS_PER_SEC.. den står til 1000, så det er ikke så sært at det passer :)
Avatar billede arne_v Ekspert
03. december 2003 - 19:25 #9
Det gør den også på nogle systemer. POSIX siger 1000000. Men Windows er
ikke POSIX compliant.
Avatar billede arriva Nybegynder
07. december 2003 - 21:30 #10
takker for svarene!
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