Как использовать clock () в C ++ - PullRequest
119 голосов
/ 10 июля 2010

Как мне позвонить clock() в C++?

Например, я хочу проверить, сколько времени занимает линейный поиск, чтобы найти данный элемент в массиве.

Ответы [ 6 ]

191 голосов
/ 10 июля 2010
#include <iostream>
#include <cstdio>
#include <ctime>

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';
}
60 голосов
/ 27 августа 2015

Альтернативное решение, которое является портативным и с более высокой точностью, доступное после C ++ 11, заключается в использовании std::chrono.

Вот пример:

#include <iostream>
#include <chrono>
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<std::chrono::nanoseconds>(t2 - t1).count()
              << " nanoseconds" << std::endl;
}

Запускэто на ideone.com дал мне:

Delta t2-t1: 282 nanoseconds
29 голосов
/ 10 июля 2010

clock() возвращает количество тактов с момента запуска вашей программы.Существует связанная константа CLOCKS_PER_SEC, которая сообщает вам, сколько тактов происходит за одну секунду.Таким образом, вы можете проверить любую операцию следующим образом:

clock_t startTime = clock();
doSomeOperation();
clock_t endTime = clock();
clock_t clockTicksTaken = endTime - startTime;
double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;
4 голосов
/ 25 февраля 2018

По крайней мере, в Windows, практически точный механизм измерения - это QueryPerformanceCounter (QPC).std :: chrono реализован с его использованием (начиная с VS2015, если вы его используете), но он не точен в той же степени, что и использование QueryPerformanceCounter напрямуюВ частности, утверждение о том, что отчет с гранулярностью в 1 наносекунду, абсолютно неверно.Итак, если вы измеряете что-то, что занимает очень мало времени (и ваш случай может быть именно таким), то вам следует использовать QPC или эквивалент для вашей ОС.Я столкнулся с этим при измерении задержек в кеше и записал некоторые заметки, которые могут оказаться полезными здесь;https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md

1 голос
/ 27 августа 2015
#include <iostream>
#include <ctime>
#include <cstdlib> //_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"
0 голосов
/ 17 марта 2016

Возможно, вас заинтересует таймер, подобный этому: H: M: S. Мксек.

код в ОС Linux:

#include <iostream>
#include <unistd.h>

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";
}
...