我有一個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