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 комментарий
Решения вопроса 0
Ответы на вопрос 2
Любые ответы на любые вопросы
#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 комментария
миллисекундах
// floating-point duration: no duration_cast needed std::chrono::durationfp_ms = t2 — t1;
Источник: qna.habr.com
std::clock
Возвращает приблизительное время процессора, использованное процессом с начала определенной эпохой реализации, связанной с выполнением программы. Чтобы преобразовать значение результата в секунды, разделите его на CLOCKS_PER_SEC .
std::clock смысл только разница между двумя значениями, возвращаемыми различными вызовами std :: clock , так как начало эры std::clock не обязательно должно совпадать с началом программы. Время std::clock может продвигаться быстрее или медленнее, чем настенные часы, в зависимости от ресурсов выполнения, предоставленных программе операционной системой. Например, если ЦП совместно используется другими процессами, время std::clock может продвигаться медленнее, чем настенные часы. С другой стороны, если текущий процесс является многопоточным и доступно более одного исполнительного ядра, время std::clock может продвигаться быстрее, чем настенные часы.
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