Вопреки распространенному мнению, функция clock()
извлекает процессорное время, а не истекшее время на часах, так как название может сбивать с толку, заставляя людей верить.
Вот язык из стандарта C:
7.27.2.1 Функция clock
Синопсис
#include <time.h>
clock_t clock(void);
Описание
Функция clock
определяет используемое время процессора.
Returns
Функция clock
возвращает наилучшее приближение реализации к времени процессора, используемому программой с начала определенной эпохой реализации, связанной только с вызовом программы. Чтобы определить время в секундах, значение, возвращаемое функцией часов, следует разделить на значение макроса CLOCKS_PER_SEC
. Если используемое время процессора недоступно, функция возвращает значение (clock_t)(−1)
. Если значение не может быть представлено, функция возвращает неопределенное значение.
Чтобы получить истекшее время, вы должны использовать одно из следующих:
- функция
time()
с разрешением 1 секунда
- функция
timespec_get()
, которая может быть более точной, но может быть недоступна во всех системах
- системный вызов
gettimeofday()
, доступный в системах linux
- функция
clock_gettime()
.
См. Что конкретно такое настенное время, пользовательское и системное время в UNIX? для получения дополнительной информации по этому вопросу.
Вот модифицированная версия, использующая gettimeoday()
:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
int main() {
struct timeval start, end;
gettimeofday(&start, NULL);
sleep(3);
gettimeofday(&end, NULL);
double time_taken = end.tv_sec + end.tv_usec / 1e6 -
start.tv_sec - start.tv_usec / 1e6; // in seconds
printf("time program took %f seconds to execute\n", time_taken);
return 0;
}
Выход:
time program took 3.005133 seconds to execute