2010-11-17 2 views
1

Могу ли я настроить отдельный поток для обратного вызова AU (который находится в C)? Как ? Если да, то какие методы потоков лучше всего подходят для CoreAudio? NSThreads? NSOperationQueue? НОД? Что-то другое?CoreAudio и Threads, как?

Большое спасибо.

+1

Уточняю немного? Это для реального времени или офлайн-рендеринга? Кто вызывает вашу функцию рендеринга? – sbooth

+0

Я имел в виду построение AUGraph и чтение аудиоданных в основном цикле, но выполнение графика в отдельном потоке, чтобы любое действие UI не мешало звуковому рендерингу. Надеюсь, что яснее. –

ответ

0

Разве ваш обратный вызов AU уже не работает в отдельной теме? В большинстве случаев я бы сказал, пусть ОС справится с этим для вас. Пользовательский интерфейс всегда должен быть на основном потоке, в то время как Core Audio обычно делает свои вещи в другом потоке.

У меня был опыт работы с NSThread и pthreads, так как я начал работу перед GCD и NSOperationQueue и не имел возможности узнать, работают ли они с Core Audio.

+0

Я создал свой AUGraph и предварительно загрузил свои звуковые файлы в основной цикл, но я запускаю AUGraph на отдельном NSThread. На iphone 1-го поколения пользовательский интерфейс отвечает быстрее (раньше, если все было в основном цикле, и AU Callback перегружал интерфейс, он застрял). –

0

Нет, это невозможно, потому что:

рендер обратного вызова живет приоритет потока в режиме реального времени, на котором последующие вызовы делают поступают асинхронно. Apple Documentation