簡體   English   中英

iOS中的空閑線程方法

[英]Idle thread approach in iOS

我正在嘗試建立一個在新數據可用之前一直處於空閑狀態的線程。 在Objective-C中,最好的方法是什么? 到現在為止,我一直試圖做一個簡單的運行循環

while(YES) {
   if(isDataAvailable) {
      //process data
   }
}

但是,這對性能有很大的影響,我的FPS從40下降到20,並且接口變得不可用(即使實際的數據處理[NSThread sleepForTimeInterval:0.01]發生一次,並且對CPU來說也不是很[NSThread sleepForTimeInterval:0.01] 。我嘗試添加[NSThread sleepForTimeInterval:0.01]最后, [NSThread sleepForTimeInterval:0.01] ,但是這樣我丟失了數據包(“過程數據”指的是一些與流相關的操作,隊列和非隊列數據包),但是FPS恢復正常。

我是Objective-C的新手,我在想也許有更好的方法可以做到這一點? 我還查看了NSRunLoop,但沒有設法使其像運行循環一樣工作:),僅向其附加了一個計時器,該計時器的作用不超過我的[NSThread sleepForTimeInterval:0.01]

非常感謝您的任何幫助:D

如果需要使輔助線程保持活動狀態,則肯定要使用真正的運行循環: http : //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#// apple_ref / doc / uid / 10000057i-CH16-SW1

基本上,只需創建並啟動線程,設置一個自動釋放池,然后在一定的設置時間內運行runloop。 時間到時,您檢查是否應該退出線程,還是再次進入運行循環。

正如Marcelo指出的那樣,有更多現代方法可以實現並發(GCD和異步分派是幾個示例),因此也許也可以研究其他形式的並發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM