我有一个iPhone应用程序正在录制音频,然后通过网络广播它。为了响应来自远端的“停止”,它排队通知以停止记录。唉,当它到达AudioQueueStop调用应用程序只是挂起(即停止从不退出)。感谢通知,所有的AudioQueue操作都发生在同一个线程上。iPhone CoreAudio停止时停止
有没有人知道这是怎么回事?
编辑:我已经在处理记录器的UI线程中设置了一个侦听器。
然后从我的网络线程中,我使用“postNotificationName”,因为它是向UI线程发布消息,并且所有内容都将从该线程运行。这似乎并非如此。当我断开由postNotificationName调用的函数时,看起来该调用是在网络线程上进行的,而不是在UI线程上进行的。
我认为这是我的错误。任何人都知道如何通过通知UIThread来处理它?
Edit2:好的我已经重新编写它来使用performSelectorOnMainThread。它仍然崩溃。
从好的方面我只是学会了如何获得更多的信息出来的XCode,所以我可以看到调用堆栈云:
semaphore_timedwait_signal_trap
semaphore_timedwait_signal
_pthread_cond_wait
pthread_cond_timedwait_relative_np
CAGuard :: WaitFor的
ClientAudioQueue :: ServicePendingCallbacks
AudioQueueStop
[etc]
任何人有任何想法,为什么它挂起?
我在做同步,因为我希望它立即结束。请检查我的编辑:) – Goz 2010-06-22 10:11:11
您是否尝试过NSThread而不是“performSelectorOnMainThread”的“detachNewThreadSelector:toTarget:withObject:”方法?停止将在新线程中调用的事实也许可以解决这个问题。 – 2010-06-22 11:58:46
其实仔细检查你完全正确。我的线程间通信是持有一个锁,它阻止音频通过网络发送,因为在缓冲区填充回调我猜它不能退出。我会立即检查这个:) – Goz 2010-06-22 12:34:09