繁体   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