std:: clock
|
Определено в заголовочном файле
<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
в текстовое представление
(функция) |
|
|
возвращает текущее время системы как время с начала эпохи
(функция) |
|
|
Документация C
для
clock
|
|