RunLoops
几天来,我一直在阅读Apple 文档和 Google 搜索中的内容。我在RunLoops
很大程度上理解了这个概念,但我仍然没有回答一些关于RunLoops
.
- 究竟是如何
Runloop
工作的?是否类似于在某个系统级别运行的 while 循环? - 如果它确实是某个系统级别的某种 while 循环,那么它与轮询有何不同?
请为此提供一些指示..
RunLoops
几天来,我一直在阅读Apple 文档和 Google 搜索中的内容。我在RunLoops
很大程度上理解了这个概念,但我仍然没有回答一些关于RunLoops
.
Runloop
工作的?是否类似于在某个系统级别运行的 while 循环?请为此提供一些指示..
关于 RunLoop(在其他平台上被称为窗口处理程序、主循环、事件循环)的全部意义在于它促进了事件驱动架构,其中应用程序仅在有事可做时才运行 - 例如,响应用户交互。这与轮询相反。
该架构的基础是某种消息队列,线程可以阻塞该消息队列,直到有消息可供处理。在 MacOSX 和 iOS 系统上,队列是一个Mach 内核RPC port
。在 Windows 上,它是一个内核 IPC 队列,而在 X-windows 系统上,它是一个 unix 域或网络套接字。
事件由其他系统组件(例如窗口管理器和其他应用程序)插入到队列中。应用程序也经常从其他线程向自己发送消息,以便在同一线程中执行所有 UI 处理。
运行循环本身驻留在应用程序空间中,看起来像这样:
while (!stop)
{
message = WaitForNextMessage();
DispatchMessage(message);
}
通常,您使用的任何 UI 框架都提供了一种为特定类型的事件注册事件处理程序的机制。