gpt4 book ai didi

c++ - iPhone CoreAudio 停止时挂起

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:38 39 4
gpt4 key购买 nike

我有一个 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::WAITING
ClientAudioQueue::ServicePendingCallbacks
音频队列停止
[等]

有人知道它挂起的原因吗?

最佳答案

你怎么称呼AudioQueueStop ?该函数支持同步和异步两种模式。

首选方法是使用异步停止,因为该函数将立即返回,同时将播放/记录剩余的缓冲区。

如果您想要进行同步但挂起,那么可能某处存在死锁或竞争条件。您是否尝试过在调试器下暂停应用程序并检查线程的堆栈帧以查看问题出在哪里?

关于c++ - iPhone CoreAudio 停止时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091400/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com