【发布时间】:2010-06-22 08:21:04
【问题描述】:
我有一个 iPhone 应用程序正在录制音频,然后通过网络进行广播。响应来自远端的“停止”,它会排队通知以停止记录。唉,当它到达 AudioQueueStop 调用时,应用程序只是挂起(即 Stop 永远不会退出)。感谢通知,所有 AudioQueue 操作都发生在同一个线程上。
有人知道这里发生了什么吗?
编辑:我在处理记录器的 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::等待
ClientAudioQueue::ServicePendingCallbacks
音频队列停止
[等]
有人知道为什么会挂起吗?
【问题讨论】:
标签: c++ iphone objective-c core-audio