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