2012-09-17 17 views
0

我的問題最好由架構下面enter image description here吹掃一個數據容器的內容物在實時

基本上解釋的,我必須清除一個NSMutableData對象的內容(或任何其它對象,就此而言)在即時,即我不能阻止其包含的線程。有沒有一種方法/ API來做到這一點?

更新:作爲mentioned在下面的意見...我實時接收音頻數據包的主線程並立即將其路由專用音頻池線程..(我之所以有這麼多的線程是b/ci不能控制傳入數據包的接收......它們實時發送+回放速度比接收數據的速度慢很多,因此單獨的音頻池線程和讀取器線程)

+1

「清除內容」是什麼意思? –

+0

這是一個基本的緩衝問題 –

+0

@stackmonster清除內容基本上意味着我想清除已經發送給它的數據。這裏的技巧是在相同的線程中同時清除和寫入數據* ..我不認爲這是一個基本的問題 – abbood

回答

0

Circular buffers aka ring buffers很好地與NSMutableData一起工作,因爲您可以直接使用字節數組作爲緩衝區。

看着設計,我不明白你爲什麼需要這麼多的緩衝區。似乎有一個線程和兩個緩衝區太多。爲什麼不只是有一個環形緩衝區,填充它(它是'自我清除'),並在一個單獨的線程中讀取它?你的設計(即可以改變)還是已經強加給你?

無論如何,請嘗試爲您的音頻池使用環形緩衝區。

+0

我已經考慮過環形緩衝區,環形緩衝區的問題在於,爲了使其工作,緩衝區中的數據必須以幾乎相同的速率生成和使用 - >問題的第二部分是哪種類型的地址,這就是爲什麼我有太多的線程?原因是我實時接收數據..所以我不能阻止它或以任何方式限制它(我幾乎需要一個專用的線程,我不能讓該線程做任何其他的事情,可以減慢了實時數據的接收速度,所以MainThread並不好,因爲它必須進行UI更新等) - > – abbood

+0

< - 閱讀器線程更像是信息流的控制器..它連續請求音頻池線程中的數據..並停止詢問音頻隊列環形緩衝區是否已滿.. 所以簡而言之..簡單地用環形緩衝區替換音頻池不會解決我的實時參數(我會更新問題) – abbood

相關問題