2009-11-17 4 views
1

Я хотел бы воспроизводить звук всего за короткий промежуток времени, короче, чем продолжительность звукового файла. Поэтому, в то время как я начинаю играть, я хотел бы поставить в очередь задачу, которая остановит звук.Скорее всего вовремя: + timeWithTimeInterval или -performSelector: withObject: afterDelay:

Я вижу два варианта очереди методы остановки: NSTimer и performSelector: withObject: afterDelay:

Кто-нибудь знает, какой из двух, скорее всего, чтобы вызвать по времени, или иметь более высокий приоритет? Не обязательно, чтобы меня вызывали с точностью до миллисекунды, но точность до 0,1 секунды была бы большой.

Приложение: Кто-нибудь знает, где я могу найти документацию о приоритете различных задач таймера и задержки? Например, как бы ниже ранг:

  • NSTimer задачи
  • performSelector
  • призванием DrawRect открывается вид после setNeedsDisplay был назван
  • Призвание рисования рутин слой после того, как setNeedsDisplay был назван
  • любые другие отсроченные задачи

И это было бы полезно, чтобы попытаться сделать это в другом Thr EAD?

ответ

2

performSelector:withObject:afterDelay: создаст таймер, чтобы знать, когда нужно стрелять, поэтому оба подхода должны быть одинаково (не) надежными. Если ваш код выполняет дорогостоящий расчет в основном потоке и не возвращает управление циклу запуска или если цикл выполнения должен обрабатывать множество событий, таймер не будет срабатывать вовремя.

0

С моей точки зрения, они должны быть практически такими же. Тем не менее, лучший способ понять это - проверить его самостоятельно. Запустите кучу тестов и запишите точное время, а затем посмотрите, что ближе.

+0

Я получаю непоследовательные результаты. Похоже, что в зависимости от того, что я делаю в своей runloop, функция PerformSelector откладывается. Тем не менее, я вижу случайные задержки в NSTimer. Я буду продолжать. – mahboudz

+0

Я предполагаю, что вы, вероятно, слишком много набираете эту проблему. В дальнейшем это вряд ли будет проблемой. – jtbandes

+0

Я не уверен, что вы имеете в виду. Причина, по которой я хочу надежно остановить звук, заключается в том, что чем дольше воспроизводится звук, тем больше подсказок он предоставляет игроку моей игры. Важное значение имеет возможность остановить его вовремя. – mahboudz

1

Имейте NSTimer, но с гораздо меньшим интервалом времени, чем тот, который должен воспроизводить ваш звук. Когда ваш таймер срабатывает, и это происходит пару раз, пока ваш звук воспроизводится, вы считаете, сколько времени прошло с момента его запуска. Когда это время превышает установленный вами запас, вы останавливаете звук.

Смежные вопросы