Domanda

I stava cercando di programmare una classe Timer (ignaro che aveva una spinta), poi, quando che non funzionava, ho cercato di appena uscita il valore di clock (), utilizzando questo codice:

#include <ctime>
#include <iostream>

int main()
{
 for(int i = 0; i < 50; ++i)
 {
  std::cout << std::clock() << " ";
 }
 return 0;
}

Quando eseguo il programma, ottengo una serie di 0. Ho un'esperienza simile quando si utilizzano le funzioni del sonno filo spinta per diffondere tempi un po 'di più (anche se dopo pochi secondi, si passa da 0 a 10.000 e continua a emettere 10.000).

Sono in esecuzione di Gentoo Linux. Si tratta di una cosa piattaforma? A C ++ cosa? Cosa sta succedendo?

Modifica: Stranamente il salto per 10000 viene dopo una serie di secondi , non millisecondi. Quando stavo dormendo mio thread per la seconda volta, ci sono voluti cinque o sei secondi per arrivare a 10000. Tuttavia, se sto comprensione correttamente. Il tempo che il filo passa a pelo non contribuisce verso il conteggio dell'orologio ()? (Che avrebbe senso;? Il motivo per cui sarebbe l'esecuzione di cicli di clock se si tratta di dormire)

È stato utile?

Soluzione

Il valore di ritorno clock() è specificato in microsecondi. Ma tipica granularità di qualsiasi sistema a basso livello di chiamata gli usi di implementazione clock() è molto più basso. Così sembra che sul proprio sistema la granularità è 10ms. Si noti inoltre che clock() fa non di misurare in tempo reale - si misura il tempo di CPU utilizzata dal programma. Così il tempo scorre quando i controlli programmare la CPU, e si blocca quando il programma è sospeso -. Dormire, ad esempio

Altri suggerimenti

risoluzione

di std::clock non è specificato. Nella maggior parte dei casi, è la risoluzione sta per essere circa 10ms. Da qui il salto.

Prova il seguente:

#include <ctime>
#include <iostream>

int main()
{
   for(int i = 0; i < 50; ++i)
   {
      for (int j = 0; j < 500; ++j )
      {
         std::cout << j << " ";
      }
      std::cout << std::endl;
      std::cout << std::clock() << std::endl;
   }
   std::cout << std::endl;
   return 0;
}     

Sul mio sistema, vedo il valore di ritorno di clock () presso 0 fino a un certo punto salta a 10000. Rimane a 10000 fino alla fine. Se rimuovo lo std :: cout nel ciclo interno, il valore di ritorno di clock () soggiorni a 0 fino in fondo. Looks come l'orologio () Valori rendimenti in incrementi di 10.000 solo.

Se cambio il ciclo interno per calcolare la radice quadrata di j e stampare il valore di ritorno di sqrt (), il valore di ritorno di clock () va fino a 50000, ma è aumenta ancora con incrementi di 10000.

sul mio sistema operativo a 64 bit la velocità CLOCKS_PER_SEC è 1000.and i valori di orologio è disponibile in millisecondi. tempismo perfetto sarà estratto dal codice qui sotto.

int main(){

clock_t a,b;
int c,d,e,f;
c=clock();
scanf("%d",&e);
d=clock();
f=(d-c)/CLOCKS_PER_SECOND;
printf("timing is %d seconds",f);/*for 64 bit operating system         
CLOCKS_PER_SECOND is 1000*/




}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top