Пространства имён
Варианты
Действия

std::clock

Материал из cppreference.com
< cpp‎ | chrono‎ | c
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Утилиты даты и времени в стиле C
Функции
Манипуляции временем
clock
Преобразование форматов
Константы
Типы
(C++17)
 
Определено в заголовочном файле <ctime>
std::clock_t clock();

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

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

Содержание

[править] Параметры

(нет)

[править] Возвращаемое значение

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

[править] Исключения

Ничего не генерирует.

[править] Примечание

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

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

[править] Пример

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

#include <iostream>
#include <iomanip>
#include <chrono>
#include <ctime>
#include <thread>
 
// функция f() выполняет трудоёмкую работу
void f()
{
    volatile double d = 0;
    for(int n=0; n<10000; ++n)
       for(int m=0; m<10000; ++m) {
           double diff = d*n*m;
           d = diff + d;
       }
}
 
int main()
{
    const 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();
    const std::clock_t c_end = std::clock();
    const auto t_end = std::chrono::high_resolution_clock::now();
 
    std::cout << std::fixed << std::setprecision(2) << "Используемое процессорное время: "
              << 1000.0 * (c_end - c_start) / CLOCKS_PER_SEC << " мс\n"
              << "Прошло времени обычных часов: "
              << std::chrono::duration<double, std::milli>(t_end-t_start) << '\n';
}

Возможный вывод:

Используемое процессорное время: 1590.00 мс
Прошло времени обычных часов: 808.23ms

[править] Смотрите также

преобразует объект std::time_t в текстовое представление
(функция) [править]
возвращает текущее время системы как время с начала эпохи
(функция) [править]