2013-08-17 36 views
3

我一直在阅读关于RunLoops在Apple文档和谷歌搜索的东西几天。我在很大程度上理解了RunLoops的概念,但仍然没有回答关于RunLoops的一些基本问题。RunLoop如何减少CPU周期

  1. Runloop如何正确工作?是否像while循环在某个系统级别运行?
  2. 如果它确实是某种系统级的while循环,那么它与轮询有什么不同?

请为我提供一些指引对这个..

回答

6

约RunLoop(分别命名为窗口处理,主回路,在其他平台上的事件循环)的全部意义在于,它有助于一个事件驱动架构其中应用程序只在需要做某事时运行 - 例如,响应用户交互。这与投票相反。

该体系结构的基础是一种消息队列,线程可以阻止该消息队列,直到消息可供处理。在MacOSX和iOS系统上,队列是Mach kernel RPC port。在Windows上,它是一个内核IPC队列,以及X-windows系统,一个unix域或网络套接字。

事件被其他系统组件(例如窗口管理器和其他应用程序)插入到队列中。为了在同一个线程中执行所有的UI处理,应用程序从其他线程发出消息也很常见。

的运行循环本身驻留在应用空间和看起来是这样的:

while (!stop) 
{ 
    message = WaitForNextMessage(); 
    DispatchMessage(message); 
} 

通常情况下,无论您使用的UI框架提供了一种机制,用于注册特定类型的事件的事件处理程序。

+0

非常感谢您的回复。你的回答确实清除了我的RunLoops概念。但我认为我需要进一步深入研究,并阅读您在回答“事件驱动架构”中提到的内容。 – tek3