Namespaces
Variants

std:: clock

From cppreference.net
< cpp ‎ | chrono ‎ | c
Определено в заголовочном файле <ctime>
std:: clock_t clock ( ) ;

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

Только разница между двумя значениями, возвращёнными разными вызовами std::clock , имеет смысл, поскольку начало эры std::clock не обязано совпадать со стартом программы.

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

Содержание

Возвращаемое значение

Время процессора, использованное программой на данный момент.

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

Исключения

Ничего не выбрасывает.

Примечания

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

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

Пример

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

#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <thread>
// The function f() does some time-consuming work.
void f()
{
    volatile double d = 0;
    for (int n = 0; n != 10000; ++n)
        for (int m = 0; m != 10000; ++m)
            d += d * n * m;
}
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() is called on two threads
    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) << "CPU time used: "
              << 1000.0 * (c_end - c_start) / CLOCKS_PER_SEC << "ms\n"
              << "Wall clock time passed: "
              << std::chrono::duration<double, std::milli>(t_end - t_start) << '\n';
}

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

CPU time used: 1590.00ms
Wall clock time passed: 808.23ms

Смотрите также

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