Как засечь время выполнения программы в c chrono

system_clock может использоваться для измерения времени, прошедшего в течение некоторой части выполнения программы.

#include #include #include int main() < auto start = std::chrono::system_clock::now(); // This and «end»‘s type is std::chrono::time_point < // The code to test std::this_thread::sleep_for(std::chrono::seconds(2)); >auto end = std::chrono::system_clock::now(); std::chrono::duration elapsed = end — start; std::cout

В этом примере sleep_for был использован для того, чтобы сделать активный поток сна за период времени, измеренный в std::chrono::seconds , но код между фигурными скобками может быть любым вызовом функции, который занимает некоторое время для выполнения.

Найдите количество дней между двумя датами

В этом примере показано, как найти количество дней между двумя датами. Дата указана по году / месяцу / дню месяца и дополнительно к часу / минуте / секунде.

Программа рассчитывает количество дней в годах с 2000 года.

#include #include #include #include /*** * Creates a std::tm structure from raw date. * * param year (must be 1900 or greater) * param month months since January – [1, 12] * param day day of the month – [1, 31] * param minutes minutes after the hour – [0, 59] * param seconds seconds after the minute – [0, 61](until C++11) / [0, 60] (since C++11) * * Based on http://en.cppreference.com/w/cpp/chrono/c/tm */ std::tm CreateTmStruct(int year, int month, int day, int hour, int minutes, int seconds) < struct tm tm_ret = ; tm_ret.tm_sec = seconds; tm_ret.tm_min = minutes; tm_ret.tm_hour = hour; tm_ret.tm_mday = day; tm_ret.tm_mon = month — 1; tm_ret.tm_year = year — 1900; return tm_ret; > int get_days_in_year(int year) < using namespace std; using namespace std::chrono; // We want results to be in days typedef duration>::type> days; // Create start time span std::tm tm_start = CreateTmStruct(year, 1, 1, 0, 0, 0); auto tms = system_clock::from_time_t(std::mktime( // Create end time span std::tm tm_end = CreateTmStruct(year + 1, 1, 1, 0, 0, 0); auto tme = system_clock::from_time_t(std::mktime( // Calculate time duration between those two dates auto diff_in_days = std::chrono::duration_cast(tme — tms); return diff_in_days.count(); > int main()
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow

  • Начало работы с C ++
  • C несовместимости
  • Const Correctness
  • constexpr
  • decltype
  • Loops
  • Perfect Forwarding
  • RAII: Приобретение ресурсов является инициализацией
  • RTTI: информация о времени выполнения
  • SFINAE (ошибка замены не является ошибкой)
  • static_assert
  • std :: function: для обертывания любого элемента, вызываемого
  • std :: set и std :: multiset
  • авто
  • Арифметика с плавающей точкой
  • Арифметическое метапрограммирование
  • Атомные типы
  • Атрибуты
  • Базовый ввод / вывод в c ++
  • Без названия
  • Бит-манипуляция
  • Более неопределенное поведение в C ++
  • Виртуальные функции участника
  • Возвращение нескольких значений из функции
  • Встроенные переменные
  • Встроенные функции
  • Вывод типа
  • Вызываемые объекты
  • вычет типа
  • Генерация случайных чисел
  • Дата и время использования заголовок
  • Значение и справочная семантика
  • Идиома Pimpl
  • Интернационализация в C ++
  • Исключения
  • Использование std :: unordered_map
  • Использование декларации
  • итераторы
  • итерация
  • Категории ценностей
  • Классы / Структуры
  • ключевое слово const
  • Ключевое слово Friend
  • ключевое слово mutable
  • Ключевые слова
  • Ключевые слова с переменной переменной
  • Ковариантность типа возврата
  • Компиляция и строительство
  • Константные функции члена класса
  • Контейнеры C ++
  • Копирование Elision
  • Копирование и назначение
  • литералы
  • Любопытно повторяющийся шаблон шаблона (CRTP)
  • Лямбда
  • Макет типов объектов
  • Массивы
  • Метапрограммирование
  • Методы рефакторинга
  • Многопоточность
  • Модель памяти C ++ 11
  • Мьютексы
  • Неопределенное поведение
  • Неопределенное поведение
  • Области применения
  • Обратный тип возврата
  • Общие ошибки компиляции / компоновщика (GCC)
  • Одно правило определения (ODR)
  • Операторы бит
  • оптимизация
  • Оптимизация в C ++
  • Основные ключевые слова
  • Пакеты параметров
  • Параллельность с OpenMP
  • Перегрузка оператора
  • Перегрузка функции
  • Перегрузка функциональных шаблонов
  • Переместить семантику
  • перечисление
  • Поведение, определяемое реализацией
  • Поиск зависимого имени аргумента
  • Полиморфизм
  • Пользовательские литералы
  • Поля бит
  • Потоки C ++
  • Потолочные манипуляторы
  • Правило три, пять и ноль
  • препроцессор
  • Примеры клиентского сервера
  • приоритет оператора
  • Пространства имен
  • профилирование
  • Разрешение перегрузки
  • Реализация шаблона проектирования в C ++
  • Регулярные выражения
  • Рекомендации
  • Рекурсивный Мьютекс
  • Рекурсия в C ++
  • Сгибание выражений
  • семафор
  • Системы сборки
  • Сортировка
  • Союзы
  • Специальные функции участников
  • Спецификаторы класса хранения
  • Сравнение сборок с классическими примерами C ++, разрешенными с помощью C ++ vs C ++ 11 vs C ++ 14 vs C ++ 17
  • Средства и методы отладки и отладки C ++
  • станд :: forward_list
  • станд :: integer_sequence
  • станд :: iomanip
  • станд :: вариант
  • станд :: вектор
  • станд :: Карта
  • станд :: любой
  • станд :: массив
  • станд :: опционально
  • станд :: пара
  • станд :: строка
  • Стандарт ISO C ++
  • Стандартные библиотечные алгоритмы
  • СТД :: атомарных
  • Структуры данных в C ++
  • Структуры синхронизации потоков
  • Тестирование модулей в C ++
  • Тип Erasure
  • Тип Ключевые слова
  • Типед и псевдонимы типов
  • Типовые черты
  • указатели
  • Указатели для участников
  • Умные указатели
  • Управление памятью
  • Управление потоком
  • Управление ресурсами
  • Файловый ввод-вывод
  • Файлы заголовков
  • Функции нестатического пользователя
  • Функция C ++ «вызов по значению» против «вызов по ссылке»
  • Фьючерсы и обещания
  • Характеристики связи
  • центровка
  • Цифровые разделители
  • Шаблон дизайна Singleton
  • Шаблоны
  • Шаблоны выписки
  • Этот указатель
  • Явные преобразования типов
Читайте также:
Как найти баги программы

Источник: learntutorials.net

C++零基础教程之时钟与时间点,轻松上手C++chrono

КАК ИЗМЕРИТЬ ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ, КОДА, МЕТОДА, ФУНКЦИИ, ЗАПРОСА | C# STOPWATCH | C# ПЛЮШКИ

Время работы куска кода в миллисекундах?

но получаю вывод в секундах, что, на самом деле, меня не устраивает т.к. точность сильно падает. Как можно получить в миллисекундах, например? Или может как-то по другому стоит?

  • Вопрос задан более трёх лет назад
  • 771 просмотр

1 комментарий

Средний 1 комментарий

myjcom

Решения вопроса 0

Ответы на вопрос 2

gbg

Любые ответы на любые вопросы

#include #include //используем chrono для работы со временем using namespace std; constexpr uint64_t fib(const uint64_t n) //подсчет n-того числа Фиббоначи < return n < 2 ? 1 : fib(n-1)*fib(n-2); >int main() < uint64_t input; cin >> input; //рекомендуется ввести 42 //запоминаем время начала работы const auto start=chrono::high_resolution_clock::now(); const auto res=fib(input); //ниже получаем время работы в микросекундах. //Это нужно для того, чтобы учесть время менее одной миллисекунды, //которое в противном случае, округлится до 0. const double time=chrono::duration_cast(chrono::high_resolution_clock::now()-start).count(); cout

Ответ написан более трёх лет назад

Нравится 1 2 комментария

myjcom

миллисекундах

// floating-point duration: no duration_cast needed std::chrono::durationfp_ms = t2 — t1;

gbg

Источник: qna.habr.com

std::clock

Возвращает приблизительное время процессора, использованное процессом с начала определенной эпохой реализации, связанной с выполнением программы. Чтобы преобразовать значение результата в секунды, разделите его на CLOCKS_PER_SEC .

std::clock смысл только разница между двумя значениями, возвращаемыми различными вызовами std :: clock , так как начало эры std::clock не обязательно должно совпадать с началом программы. Время std::clock может продвигаться быстрее или медленнее, чем настенные часы, в зависимости от ресурсов выполнения, предоставленных программе операционной системой. Например, если ЦП совместно используется другими процессами, время std::clock может продвигаться медленнее, чем настенные часы. С другой стороны, если текущий процесс является многопоточным и доступно более одного исполнительного ядра, время std::clock может продвигаться быстрее, чем настенные часы.

Читайте также:
Программа для настройки zoom

Parameters

Return value

Время процессора, используемое программой до сих пор, или std::clock_t(-1) , если эта информация недоступна или ее значение не может быть представлено.

Exceptions

Notes

В POSIX-совместимых системах clock_gettime с идентификатором часов CLOCK_PROCESS_CPUTIME_ID предлагает лучшее разрешение.

Значение, возвращаемое функцией clock() , может повторяться в некоторых несоответствующих реализациях. Например, в такой реализации, если std::clock_t является 32-разрядным целым числом со знаком, а CLOCKS_PER_SEC равен 1000000, он будет перенесен примерно через 2147 секунд (около 36 минут).

Example

Этот пример демонстрирует разницу между временем clock() и реальным временем.

#include #include #include #include #include // функция f () выполняет трудоемкую работу void f() < volatile double d = 0; for(int n=0; n10000; ++n) for(int m=0; m10000; ++m) < double diff = d*n*m; d = diff + d; > > int main() < std::clock_t c_start = std::clock(); auto t_start = std::chrono::high_resolution_clock::now(); std::thread t1(f); std::thread t2(f); // f () вызывается в двух потоках t1.join(); t2.join(); std::clock_t c_end = std::clock(); auto t_end = std::chrono::high_resolution_clock::now(); std::cout setprecision(2) «CPU time used: » 1000.0 * (c_end — c_start) / CLOCKS_PER_SEC » msn» «Wall clock time passed: » durationdouble, std::milli>(t_end-t_start).count() » msn»; >
CPU time used: 1590.00 ms Wall clock time passed: 808.23 ms

Источник: runebook.dev

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru