Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ iPhone CoreAudio在停止时挂起_C++_Iphone_Objective C_Core Audio - Fatal编程技术网

C++ iPhone CoreAudio在停止时挂起

C++ iPhone CoreAudio在停止时挂起,c++,iphone,objective-c,core-audio,C++,Iphone,Objective C,Core Audio,我有一个iPhone应用程序,可以录制音频,然后通过网络进行广播。作为对远端“停止”的响应,它将停止录制的通知排入队列。遗憾的是,当到达AudioQueueStop调用时,应用程序只是挂起(即Stop从不退出)。由于该通知,所有AudioQueue操作都发生在同一个线程上 有人知道这是怎么回事吗 编辑:我在处理记录器的UI线程中设置了一个侦听器 然后,从我的网络线程中,我使用了一个“postNotificationName”,认为它是向UI线程发布消息,所有内容都将从该线程运行。情况似乎并非如此

我有一个iPhone应用程序,可以录制音频,然后通过网络进行广播。作为对远端“停止”的响应,它将停止录制的通知排入队列。遗憾的是,当到达AudioQueueStop调用时,应用程序只是挂起(即Stop从不退出)。由于该通知,所有AudioQueue操作都发生在同一个线程上

有人知道这是怎么回事吗

编辑:我在处理记录器的UI线程中设置了一个侦听器

然后,从我的网络线程中,我使用了一个“postNotificationName”,认为它是向UI线程发布消息,所有内容都将从该线程运行。情况似乎并非如此。当我中断postNotificationName调用的函数时,似乎是在网络线程上而不是在UI线程上进行调用

我想这是我的错误。有人知道如何通过通知UIThread来处理它来让它工作吗

Edit2:好的,我已经用performselectornmainthread重新编写了它。它仍然崩溃

从好的方面来说,我刚刚学会了如何从XCode中获取更多信息,这样我就可以看到调用堆栈:

信号量\时间等待\信号\陷阱
信号量\时间等待\信号
_pthread_cond_wait
pthread_cond_timedwait_relative_np
CAGuard::WaitFor
ClientAudioQueue::ServicePendingCallbacks
音频队列停止
[etc]

有人知道它为什么挂了吗?

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

首选方法是使用异步停止,因为函数将立即返回,而剩余的缓冲区将被播放/录制


如果你想去同步,你得到挂起,那么可能有一个死锁或某个地方的比赛条件。您是否已尝试在调试器下暂停应用程序并检查线程的堆栈帧以查看问题所在?

我正在同步执行此操作,因为我希望它立即结束。请检查我的编辑:)您是否尝试了NSThread的“detachNewThreadSelector:toTarget:withObject:”方法而不是“performSelectorOnMainThread”?事实上,在一个新的线程中调用stop可能会解决挂起的问题。事实上,仔细观察你就完全正确了。我的线程间通信持有一个锁,阻止音频通过网络发送,因为它在缓冲区填充的回调中,我猜它无法退出。我现在会很快检查:)是的,就是这样!该死,我真希望我能早点检查。谢谢D