clock()
работает очень похоже на GetTickCount()
в Windows. Единицы могут быть разными. GetTickCount()
возвращает миллисекунды. clock()
возвращает CLOCKS_PER_SEC
тиков в секунду. Оба имеют максимум, который будет опрокидываться (для Windows это около 49,7 дней).
GetTickCount()
начинается с нуля при запуске ОС. Из документов похоже, что clock()
запускается, когда происходит процесс. Таким образом, вы можете сравнить время между процессами с GetTickCount()
, но вы, вероятно, не можете сделать это с clock()
.
Если вы пытаетесь вычислить, как долго что-то происходило, в рамках одного процесса, и вы не беспокоитесь об опрокидывании:
const clock_t start = clock();
// do stuff here
clock_t now = clock();
clock_t delta = now - start;
double seconds_elapsed = static_cast<double>(delta) / CLOCKS_PER_SEC;
Пояснение: Кажется, существует неопределенность в отношении того, возвращает ли clock()
истекшее время стены или время процессора. Первые несколько ссылок, которые я проверил, говорят, что настенное время. Например:
Возвращает количество тактов, прошедших с момента запуска программы.
что, правда, немного расплывчато. MSDN более явный:
Прошедшее время настенных часов с начала процесса ....
Пользователь darron убедил меня копать глубже, поэтому я нашел черновую копию стандарта C (ISO / IEC 9899: TC2) и там написано:
... возвращает наилучшее приближение реализации к используемому времени процессора ...
Я полагаю, что каждая реализация, которую я когда-либо использовал, дает время настенных часов (что, я полагаю, является приблизительным значением используемого времени процессора).
Вывод: Если вы пытаетесь рассчитать время так, чтобы вы могли тестировать различные оптимизации, тогда мой ответ уместен. Если вы пытаетесь реализовать тайм-аут на основе фактического времени настенных часов, то вам нужно проверить локальную реализацию clock()
или использовать другую задокументированную функцию, чтобы указать истекшее время настенных часов.
Обновление: В C ++ 11 есть также часть стандартной библиотеки, которая предоставляет различные часы и типы для захвата времени и продолжительности. Хотя стандарт и широкодоступен, пока не ясно, полностью ли поддерживает Android NDK.