Я использую TickCount()
для определения разницы во времени между событиями или времени, необходимого для запуска определенного фрагмента кода. Но это устарело в OS X 10.8. Поэтому мне нужна была альтернатива для того же.
TickCount() устарела в Mac OS X 10.8
Ответы (2)
Если вы хотите измерить абсолютное время, используйте
gettimeofday()
. Это дает вам дату, например, «Четверг, 22 ноября, 07:48:52 UTC 2012». Это не всегда подходит для измерения различий между событиями, поскольку время, сообщаемоеgettimeofday()
, может переходить вперед или назад, если пользователь меняет часы.Если вы хотите измерить относительное время,
mach_absolute_time()
. Это позволяет измерить разницу между двумя событиями, например, «15,410 с». Это не дает абсолютного времени, но всегда монотонно.Если вы хотите измерить процессорное время, используйте
clock()
. Это часто, но не всегда способ измерения производительности фрагмента кода. Он не учитывает время, затрачиваемое на ввод-вывод, или влияние на скорость системы, поэтому его следует использовать только тогда, когда вы знаете, что измеряете что-то, связанное с процессором.
Я удивлен, что TickCount()
не устарел раньше. Это действительно OS 9 и более ранние версии.
mach_absolute_time()
послужит моей цели. Большое спасибо.
- person dDarkLORD; 22.11.2012
gettimeofday()
более портативный.
- person trojanfoe; 22.11.2012
clock_gettime()
, в OS X вы бы использовали mach_absolute_time()
, ни один из которых не доступен в другой операционной системе.
- person Dietrich Epp; 22.11.2012
Хотя этот API может не подходить для новой разработки, если вам нужен идентичный API, его можно повторно реализовать следующим образом:
uint32_t TickCount() {
uint64_t mat = mach_absolute_time();
uint32_t mul = 0x80d9594e;
return ((((0xffffffff & mat) * mul) >> 32) + (mat >> 32) * mul) >> 23;
}
Вышеупомянутая реализация была создана путем анализа /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
и была кратко протестирована на соответствие устаревшему TickCount
с помощью LLDB путем изменения регистров, возвращаемых mach_absolute_time
.