Определение временных интервалов миллисекунды в какао

Так же, как фон я создаю приложение в Какао. Это приложение существовало первоначально в C++ в другой среде. Я хотел бы сделать как можно больше в Objective C.

Мои вопросы:

1) Как я вычисляю, как целое число, количество миллисекунд между теперь и в предыдущий раз, когда я помнил как теперь?

2) При использовании в объективной-C программе, включая time.h, из чего единицы

часы ()

Спасибо за помощь.

8
задан skaffman 14 January 2011 в 23:45
поделиться

2 ответа

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.

15
ответ дан 5 December 2019 в 07:58
поделиться

Как мне вычислить как целое число миллисекунд между настоящим моментом и предыдущим временем, которое я вспомнил, как сейчас?

Зачем вам это нужно как целое число миллисекунд ? Запрос 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 , чтобы преобразовать его в скаляр. Остается вычитание, которое вы сделаете обычным способом.

6
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: