Так же, как фон я создаю приложение в Какао. Это приложение существовало первоначально в C++ в другой среде. Я хотел бы сделать как можно больше в Objective C.
Мои вопросы:
1) Как я вычисляю, как целое число, количество миллисекунд между теперь и в предыдущий раз, когда я помнил как теперь?
2) При использовании в объективной-C программе, включая time.h, из чего единицы
часы ()
Спасибо за помощь.
You can use CFAbsoluteTimeGetCurrent()
but bear in mind the clock can change between two calls and can screw you over. If you want to protect against that you should use CACurrentMediaTime()
.
The return type of these is CFAbsoluteTime
and CFTimeInterval
respectively, which are both double
by default. So they return the number of seconds with double
precision. If you really want an integer you can use mach_absolute_time()
found in #include
which returns a 64 bit integer. This needs a bit of unit conversion, so check out this link for example code. This is what CACurrentMediaTime()
uses internally so it's probably best to stick with that.
Computing the difference between two calls is obviously just a subtraction, use a variable to remember the last value.
For the clock
function see the documentation here: clock(). Basically you need to divide the return value by CLOCKS_PER_SEC
to get the actual time.
Как мне вычислить как целое число миллисекунд между настоящим моментом и предыдущим временем, которое я вспомнил, как сейчас?
Зачем вам это нужно как целое число миллисекунд ? Запрос NSDate для временного интервала с другой даты даст вам число секунд с плавающей запятой. Если вам действительно нужны миллисекунды, вы можете просто умножить их на 1000, чтобы получить число миллисекунд с плавающей запятой. Если вам действительно нужно целое число, вы можете округлить или обрезать значение с плавающей запятой.
Если вы хотите сделать это с целыми числами от начала до конца, используйте либо UpTime
, либо mach_absolute_time
, чтобы получить текущее время в абсолютных единицах, затем используйте AbsoluteToNanoseconds
, чтобы преобразовать его в реальные единицы. Очевидно, вам придется разделить это на 1000, 000, чтобы получить миллисекунды.
QA1398 предлагает mach_absolute_time
, но UpTime
проще, поскольку он возвращает тот же тип AbsoluteToNanoseconds
использует (без указателя «указатель» весело », как показано в техническом примечании).
AbsoluteToNanoseconds
возвращает UnsignedWide
, который является структурой. (Этот материал появился еще до того, как компьютеры Mac могли обрабатывать скалярные 64-битные значения.) Используйте функцию UnsignedWideToUInt64
, чтобы преобразовать его в скаляр. Остается вычитание, которое вы сделаете обычным способом.
AbsoluteToNanoseconds
возвращает UnsignedWide
, который является структурой. (Этот материал появился еще до того, как компьютеры Mac могли обрабатывать скалярные 64-битные значения.) Используйте функцию UnsignedWideToUInt64
, чтобы преобразовать его в скаляр. Остается вычитание, которое вы сделаете обычным способом.
AbsoluteToNanoseconds
возвращает UnsignedWide
, который является структурой. (Этот материал появился еще до того, как компьютеры Mac могли обрабатывать скалярные 64-битные значения.) Используйте функцию UnsignedWideToUInt64
, чтобы преобразовать его в скаляр. Остается вычитание, которое вы сделаете обычным способом.