Cómo usar clock () en C ++

¿Cómo llamo clock() en C++ ?

Por ejemplo, quiero probar cuánto tiempo lleva una búsqueda lineal para encontrar un elemento determinado en una matriz.

 #include  #include  #include  int main() { std::clock_t start; double duration; start = std::clock(); /* Your algorithm here */ duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC; std::cout<<"printf: "<< duration <<'\n'; } 

Una solución alternativa, que es portátil y con mayor precisión, disponible desde C ++ 11, es usar std::chrono .

Aquí hay un ejemplo:

 #include  #include  typedef std::chrono::high_resolution_clock Clock; int main() { auto t1 = Clock::now(); auto t2 = Clock::now(); std::cout << "Delta t2-t1: " << std::chrono::duration_cast(t2 - t1).count() << " nanoseconds" << std::endl; } 

Ejecutar esto en ideone.com me dio:

 Delta t2-t1: 282 nanoseconds 

clock() devuelve el número de tics de reloj desde que se inició su progtwig. Hay una constante relacionada, CLOCKS_PER_SEC , que le indica cuántas CLOCKS_PER_SEC reloj se producen en un segundo. Por lo tanto, puedes probar cualquier operación como esta:

 clock_t startTime = clock(); doSomeOperation(); clock_t endTime = clock(); clock_t clockTicksTaken = endTime - startTime; double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC; 

En Windows al menos, el único mecanismo de medición prácticamente exacto es QueryPerformanceCounter (QPC). std :: chrono está implementado usándolo (desde VS2015, si lo usa), pero no es tan preciso como usar QueryPerformanceCounter directamente. En particular, su afirmación de informar a una granularidad de 1 nanosegundo no es absolutamente correcto. Por lo tanto, si está midiendo algo que lleva muy poco tiempo (y su caso podría ser un caso así), entonces debe usar QPC o el equivalente para su sistema operativo. Me enfrenté a esto al medir las latencias de caché, y anoté algunas notas que pueden ser útiles aquí; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md

 #include  #include  #include  //_sleep() --- just a function that waits a certain amount of milliseconds using namespace std; int main() { clock_t cl; //initializing a clock type cl = clock(); //starting time of clock _sleep(5167); //insert code here cl = clock() - cl; //end point of clock _sleep(1000); //testing to see if it actually stops at the end point cout << cl/(double)CLOCKS_PER_SEC << endl; //prints the determined ticks per second (seconds passed) return 0; } //outputs "5.17" 

Probablemente le interese un temporizador como este: H: M: S. Msec.

el código en el sistema operativo Linux:

 #include  #include  using namespace std; void newline(); int main() { int msec = 0; int sec = 0; int min = 0; int hr = 0; //cout << "Press any key to start:"; //char start = _gtech(); for (;;) { newline(); if(msec == 1000) { ++sec; msec = 0; } if(sec == 60) { ++min; sec = 0; } if(min == 60) { ++hr; min = 0; } cout << hr << " : " << min << " : " << sec << " . " << msec << endl; ++msec; usleep(100000); } return 0; } void newline() { cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; }