◐ Shell
clean mode source ↗

std::clock — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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

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