我正在尝试设置一个空闲的线程,直到新数据可用。 Objective-C中最好的方法是什么?直到现在我试图制作一个简单的运行循环
while(YES) {
if(isDataAvailable) {
//process data
}
}
然而,这会对性能产生巨大影响,我的FPS从40下降到20并且界面变得无法使用(即使实际的数据处理在一秒左右发生一次,而且对CPU来说也不是很强烈。我试过最后添加[NSThread sleepForTimeInterval:0.01]
,但这样我丢失了数据包('流程数据'指的是一些与流相关的操作,队列和异常数据包),但FPS恢复正常。
我是Objective-C的新手,我想也许有更好的方法可以做到这一点?我还看了一下NSRunLoop,但没有设法使它作为一个运行循环:),只附加一个计时器,它不会超过我的[NSThread sleepForTimeInterval:0.01]
事物。
任何帮助都非常感谢:D
答案 0 :(得分:1)
如果你需要保持seconary线程活着,你肯定想要使用真正的runloop: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1
基本上,只需创建并启动线程,设置自动释放池,然后运行runloop一段时间。当时间到期时,您检查是否应退出线程,或再次进入runloop。
正如Marcelo指出的那样,有更多现代方法可以实现并发(GCD和异步调度只是一些例子),所以也许可以调查其他形式的并发。