Ale*_*987 2 iphone cocoa multithreading nsthread nsrunloop
假设我有 2 个线程,一个是主线程,另一个是辅助线程。主线程使用得最多,但有时(很少)我希望辅助线程根据主线程的调用做一些工作。大多数时候辅助线程应该休眠。现在经过一些搜索,我明白了这样做的方法是使用 runLoops。所以我试图阅读苹果的文档(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW5 )
但在我看来它非常复杂,我在那里过得很艰难。有没有一种优雅而简单的方法来实现我所描述的?我可以运行和使用任何类似的 runLoop 代码示例吗?
谢谢
每个线程都有一个运行循环。
每个运行循环都有一个需要完成的事情列表。据说这些事情是在运行循环中“调度”的,尽管并非所有这些都被调度到特定的日期和时间:
当 run loop 正在运行时,它通常没有运行——也就是说,线程正在休眠,不消耗任何 CPU 周期。(如果您对其进行采样,您会发现该进程似乎卡在了 中mach_msg_trap。这是“等待某事发生”的系统调用。)内核唤醒线程(从而从 中返回mach_msg_trap)发生线程的运行循环需要处理的情况。
完全按照您的描述进行操作的方法是实现一个运行循环源。您在辅助线程的运行循环上调度源,通过工作来实现它,并在有工作要完成时从主线程发出信号。
但是, NSOperation 几乎肯定是更好的解决方案,因为它是为您描述的情况设计的:需要连续完成的离散工作单元,一次最多 N(您选择并且至少为 1)。
请注意, NSOperationQueue 重用线程,因此它不一定为每个操作创建一个新线程。事实上,不这样做是问题的一部分:它懒惰地创建线程,并使用它已经拥有但没有做任何事情的任何线程。
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |