У меня есть приложение для iPhone, которое записывает аудио, а затем транслирует его по сети. В ответ на «остановку» с дальнего конца он ставит в очередь уведомление о прекращении записи. Увы, когда он доходит до вызова AudioQueueStop, приложение просто зависает (то есть Stop никогда не завершается). Благодаря уведомлению все манипуляции с AudioQueue происходят в одном потоке.
Кто-нибудь знает, что здесь происходит?
Редактировать: я настроил слушателя в потоке пользовательского интерфейса, который обрабатывает рекордер.
Затем из моего сетевого потока я использую "postNotificationName", полагая, что это было сообщение в потоке пользовательского интерфейса, и все будет выполняться из этого потока. Это не похоже на случай. Когда я нарушаю точку, вызываемую функцией postNotificationName, создается впечатление, что вызов выполняется в сетевом потоке, а НЕ в потоке пользовательского интерфейса.
Полагаю, это моя ошибка. Кто-нибудь знает, как заставить это работать, уведомляя UIThread, чтобы обработать это?
Edit2: ОК, я переписал его, чтобы использовать executeSelectorOnMainThread. И он все еще падает.
Что касается положительных моментов, я только что узнал, как получить намного больше информации из XCode, чтобы я мог видеть, как идет стек вызовов:
semaphore_timedwait_signal_trap
semaphore_timedwait_signal
_pthread_cond_wait
pthread_cond_timedwait_relative_np
CAGuard :: WaitFor
ClientAudioQueue :: ServicePendingCallbacks
AudioQueueStop
[И т.д.]
У кого-нибудь есть идеи, почему он зависает?