Ответ в теме: Замерить время работы функции на С++

      Комментарии к записи Ответ в теме: Замерить время работы функции на С++ отключены

Главная Форумы Программирование Программирование на С++ Замерить время работы функции на С++ Ответ в теме: Замерить время работы функции на С++

#2974

При помощи средств, появившихся в стандартной библиотеке С++11 можно получить более высокую точность измерения и замерить время независимо от системных часов (с помощью так называемых стабильных часов). Обзор библиотеки chrono.

Следующий фрагмент кода выполняет замер времени с использованием стабильных часов:

#include <iostream>
#include <chrono>
int main() {
auto begin = std::chrono::steady_clock::now();
getchar(); 
auto end = std::chrono::steady_clock::now();
auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);
std::cout << "The time: " << elapsed_ms.count() << " ms\n";
}

Функция std::chrono::duration_cast преобразует объект типа <code>time_point во временной интервал (duration), при этом в качестве параметра шаблона передается промежуток времени в виде долей секунды (в данном случае миллисекунды).

Использование библиотеки chrono — лучший способ если нужно фактическое замерить время выполнения программы (в отличии функции time(), модуля time.h она позволяет получить время в миллисекундах и даже наносекундах). Однако если программа работает на многопроцессорной системе и часто ожидает какие-либо данные (не только пользовательский ввод, но и данных от других потоков/процессов) — то больший интерес может представлять реальное время выполнения, возвращаемое функцией clock() модуля time.h. Реальное время лучше отражает потребляемый ресурс процессора, т.к. если текущий процесс простаивает на кластере (где выполняются сотни других приложений), то он вытесняется операционной системой и практически не загружает процессор.