Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: gcc linux ajanmittaus

peran [09.10.2005 19:30:10]

#

Kieli on siis C ja kääntäjä on gcc, linuxilla.

Takaisin melko nopean algoritmin Putkapostiin, mutta nyt pitäisi saada mitattua aika.
Aika on pienempi kuin 1 sekunti, joten seuraava koodi ei toimi.

#include <stdio.h>
#include <time.h>
...
int main() {
    	time_t alku;
	time_t loppu;
	time(&alku);
...
...
...
	time(&loppu);
	printf("%i",loppu-alku);
}

Tulostaa 0:n, joten tarkempaa ajanottoa olisin vailla.

Deewiant [09.10.2005 19:32:45]

#

Jos kerran olet Linuxilla, voit käyttää time-komentoa: time ohjelma.exe.

EDIT: vaikka ei varmaankaan .exe, Linux-ohjelmahan se lienee :-)

peran [09.10.2005 19:45:30]

#

Kappas siinä on niinkin kätevä käsky.

Mitähän sen tulostamat tulokset käytännössä tarkoittavat, kun en man:lla ymmärtänyt.

real    0m0.051s
user    0m0.033s
sys     0m0.001s

l. Jos oikein ymmärsin, niin sen ajaminen kestää reilut 5 sadasosaa. No ohjelmassa on vielä paljon löysiä, joten hyväksyttäneen.

Metabolix [09.10.2005 19:59:18]

#

Ensimmäinen on siis oikeasti kulunut aika, jonka ohjelma oli käynnissä. Kaksi muuta ovat käytetyn prosessoriajan eri osia, eli niiden summa on ohjelman oikeasti käyttämä aika. Ensimmäiseen saattavat vaikuttaa myös se, paljonko muita ohjelmia ajetaan, ja se, kun käyttäjältä mahdollisesti odotetaan syötettä tai ohjelma on muuten "tauolla".

Näin käsittääkseni.

Deewiant [09.10.2005 20:27:35]

#

Eli esimerkiksi tuossa sys:ssä on mukaanlaskettuna vastausten tulostus, kun taas user:ssa käytännössä vain niiden lasku. "Käytännössä" siksi, että siihen tietääkseni lasketaan mukaan esimerkiksi printf:n kutsumiseen mennyt aika, kun taas sys:ssä on varsinainen tulostus.

Varsinainen ohjelman käyttämä aika on siis user.

pukki [12.10.2005 00:10:33]

#

Jotenkin näin onnistunee:

clock_t start, end;

start = clock();

 ... ajastettava koodi ...

end = clock();

printf ("%f\n", (end - start) / CLOCKS_PER_SEC);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta