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