我正在将我制作的安卓应用程序移植到iOS上。安卓有一个Yield()函数,可以将线程从运行状态移动到后台(?)线程队列的。这很有用,这样这个线程就不会占用太多的CPU并使其他线程变得迟钝。它在我的Android应用程序中运行得很好。
我正在使用NSInvocationOperation对象来实现我的线程。如何添加类似于安卓Yield()的功能
发布于 2012-03-06 17:23:42
我正在使用NSInvocationOperation对象来实现我的线程。
这没有多大意义。NSOperations在线程中运行,但它们本身不是线程,也不会让您实现任何与线程等效的东西。如果你真的想要一个线程,使用NSThread或pthread。
如何添加类似于安卓的Yield()的功能?
如果您真的想要POSIX,可以试试sched_yield()。在更高的层次上,有pthread_yield_np() (np表示不可移植-- POSIX中没有pthread_yield() ) --但它除了调用sched_yield()什么也不做。
我不会费心,直到你发现你真的需要它,而且它是有帮助的。在iOS或Mac应用程序中做这样的事情并不常见。
发布于 2012-03-06 17:22:43
你查过中央调度台吗?这是在iOS上编写多线程代码的最佳方法之一。(当然,它不是所有线程问题的完美解决方案,因此这取决于您的应用程序。)例如,GCD为非性能关键型操作提供了优先级较低的队列。
编写现代iOS应用程序的通常方法是只将UI代码保留在主线程(主GCD队列中的≈)上,并将其他操作卸载到一个全局GCD队列中。来自这些队列的阻塞并不占用主线程,它们被卸载到某个后台线程(由系统管理,而不是您)。从程序员的角度来看,它非常简单,而且似乎工作得很好。
发布于 2012-03-06 17:23:51
我建议你使用带有子类NSOperations的NSOperationQueue。那会有帮助的。
https://stackoverflow.com/questions/9580657
复制相似问题