【问题标题】:NSOperationQueue vs NSThread Priority -- controlling how much cpu is consumed in NSOperationQueueNSOperationQueue vs NSThread Priority——控制在 NSOperationQueue 中消耗了多少 cpu
【发布时间】:2011-09-09 14:13:55
【问题描述】:

我需要异步预加载一些纹理和音效,以便在我正在开发的 iOS 游戏中创建流畅的用户体验。

我正在尝试在 NSOperationQueue 和 NSThread 之间做出决定,以便在游戏过程中加载这些游戏资源。

NSOperationQueue 似乎是一个明显的赢家并且有很多好处,但我担心对这个“后台”资源加载任务进行有效的优先级控制,这样我就可以根据它消耗的周期数来拒绝它所以以免影响帧率。

我看到 NSOperationQueue 有一个“优先级”的概念,但它看起来与 NSThread 的“优先级”概念不同。如果我错了,请纠正我,但 NSThread 的优先级与系统上运行的其他线程相关,而 NSOperation 的优先级是该任务相对于其他排队任务的优先级。

我想知道的是……

与当前在设备上运行的其他线程相比,有没有办法控制给定 NSOperationQueue 任务的优先级与它可以消耗的周期数(相对于相对优先级与其他排队任务相比)?

在 NSOperationQueue 的任务中更改当前线程的优先级是否安全? (使用 NSThread 的 +setPriority)

【问题讨论】:

    标签: objective-c nsthread nsoperationqueue preloading


    【解决方案1】:

    NSOperation 的一个实例也有一个“setThreadPriority:”方法,以及“setQueuePriority:”。

    这绝对是你要找的。​​p>

    - (void)setThreadPriority:(double)priority
    

    您指定的值映射到操作系统的优先级值。指定的线程优先级仅在执行操作的 main 方法时应用于线程。在执行操作的完成块时不应用它。对于您创建自己的线程的并发操作,您必须在自定义启动方法中自己设置线程优先级,并在操作完成时重置原始优先级。

    【讨论】:

    • 谢谢...不知道我是怎么错过的,但这绝对是我想要的。
    猜你喜欢
    • 2012-05-17
    • 2012-10-11
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多