Problemet mitt er at clock() returnerer 0, og jeg skjønner ikke hvorfor!
For å se om det bare var mine dårlige kunnskaper det sto på kompilerte jeg
følgende eksempel fra en
c++ faq om <time.h>. Denne snutten skal telle ned fra 10 i ett-sekunds
intervaller, men den blir ferdig på
under 1 sek... Har noen en idè om hva som skjer? Sitter på en gnu/linux-boks
med 2.6.10.
Har prøvd med gcc versjon 3.3, 3.4., og 4.0.
/* clock example: countdown */
#include <stdio.h>
#include <time.h>
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}
int main ()
{
int n;
printf ("Starting countdown...\n");
for (n=10; n>0; n--)
{
printf ("%d\n",n);
wait (1);
}
printf ("FIRE!!!\n");
return 0;
}
m225g $time ./a.out
Starting countdown...
10
9
8
7
6
5
4
3
2
1
FIRE!!!
real 0m0.794s
user 0m0.022s
sys 0m0.081s
> Skulle prøve å time en del i programmet mitt; noe à la
> clock_t tid1 = clock();
> funksjons_kall_som_skal_times();
> double tid_brukt = (clock() - tid1)/CLOCKS_PER_SEC;
Vil du profilere funksjonen din, bør du bruke dertil egnede verktøy.
Fx. gprof.
[ ... ]
> void wait ( int seconds )
> {
> clock_t endwait;
> endwait = clock () + seconds * CLK_TCK ;
CLOCKS_PER_SEC.
Legg dog merke til at:
POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the
actual resolution.
[ ... ]
ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
-- Fry, "When aliens attack"
Merk at clock() returnerer CPU-tid, ikke real time.
> Problemet mitt er at clock() returnerer 0, og jeg skjønner ikke
> hvorfor!
Du har en altfor rask datamaskin. Bytt til en (mye) eldre modell. ;)
Ellers må du huske hvordan aritmetikk fungerer i C. Det at du typen
på venstresiden er double, gjør ikke /aritmetikken/ på høyresiden til
double. Her deler du store heltall på hverandre, og du får definitivt
ikke double av dét. Prøv å bytte ut CLOCKS_PER_SEC med
(1.0d0*CLOCKS_PER_SEC) eller du kan gjøre:
double cpu_waste = clock();
/* whatever */
cpu_waste -= clock();
cpu_waste /= -CLOCKS_PER_SEC;
> For å se om det bare var mine dårlige kunnskaper det sto på
> kompilerte jeg følgende eksempel fra en c++ faq om <time.h>.
Dét eksempelet er virkelig ikke noe noen bør kopiere. Fysj så dårlig!
> Denne snutten skal telle ned fra 10 i ett-sekunds intervaller, men
> den blir ferdig på under 1 sek... Har noen en idè om hva som skjer?
Du har brukt gal multiplier. Bytt ut CLK_TCK med CLOCKS_PER_SEC.
--
Erik Naggum 2005-277-05514 «lectitare humanum est»
Member of AAAS, ACM, AMS, APS, ASA, EMS, IMS, MAA, NMF, NYAS.
http://naggum.no/nocebo -- fear of harm is by itself harmful.