RunLoop 事件处理过程

The Run Loop Sequence of Events

Each time you run it, your thread’s run loop processes pending events and generates notifications for any attached observers. The order in which it does this is very specific and is as follows:

1, Notify observers that the run loop has been entered.

2, Notify observers that any ready timers are about to fire.

3, Notify observers that any input sources that are not port based are about to fire.

4, Fire any non-port-based input sources that are ready to fire.

5, If a port-based input source is ready and waiting to fire, process the event immediately. Go to step 9.

6, Notify observers that the thread is about to sleep.

7, Put the thread to sleep until one of the following events occurs:

  • An event arrives for a port-based input source.
  • A timer fires.
  • The timeout value set for the run loop expires.
  • The run loop is explicitly woken up.

8, Notify observers that the thread just woke up.

9,Process the pending event.

  • If a user-defined timer fired, process the timer event and restart the loop. Go to step 2.
  • ??If an input source fired, deliver the event.??
  • ??If the run loop was explicitly woken up but has not yet timed out, restart the loop.?? Go to step 2.

10, Notify observers that the run loop has exited.

从 步骤2 到 步骤9 称为 一个 loop,

从整个过程可以看出,

  • Port-based input source 优先级是最高的,得到优先处理,但是port event 并不屏蔽其他事件,处理完 port event 可以在同一个loop中继续处理其它事件(Timer 、 custom、 selector)
  • Timer事件比较特殊, 从第九步可以看出每次 timer 事件触发后,会导致loop从新开始,其余事件(custom、 selector)只能在新的loop得到处理机会。
  •  runMode:beforeDate方法执行一次,内部可能发生 1次 或 多次loop
  • 除了Port-based event 和 Timer event, RunLoop 的 runMode:beforeDate 方法每次处理完一个 input source 事件(包括custom 、selector)或者time out就会返回。
时间: 2024-08-30 12:26:08

RunLoop 事件处理过程的相关文章

linux输入子系统(input subsystem)之evdev.c事件处理过程

1.代码 input_subsys.drv.c 在linux输入子系统(input subsystem)之按键输入和LED控制的基础上有小改动,input_subsys_test.c不变. input_subsys.drv.c 1 #include <linux/module.h> 2 #include <linux/version.h> 3 4 #include <linux/init.h> 5 #include <linux/fs.h> 6 #inclu

全球最低功耗蓝牙单芯片DA14580的软件体系 -层次架构和BLE消息事件处理过程

在作者之前发表的<全球最低功耗蓝牙单芯片DA14580的系统架构和应用开发框架分析>.<全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗>.<全球最低功耗蓝牙单芯片DA14580的软件体系-RW内核和消息处理机制>三篇文章分析了DA14580的SDK开发目录结构.硬件架构.低功耗.RW内核和消息处理机制.本篇文章将深入到具体的源码去分析DA14580平台的软件层次架构和具体的BLE消息处理过程,以此佐证前面发表的文章. 一.软件层次架构 1.1 BLE协议栈 从中

iOS:使用block代码块实现事件处理过程中的回调

block是什么,这里就不多加强调了,它的优点: 第一:执行效率高,速度快 第二:使用起来比代理简单,省却不少代码,增强代码美感 有一些小的知识点要强调一下: 第一点:它类似于一个匿名函数,也跟java中的匿名内部类相似,但是,记住,它是一种基本数据类型: 第二点:在类中声明block为属性时,如果使用assgin修饰,那么它被放到了栈中,方法已过就会被销毁,所以,尽量使用copy作为修饰词,这样一来block就被存放到了堆中,生命周期就会延长,保证block不会被立即销毁: 第三点:要防止循环

Netty5 Read事件处理过程_源码讲解

netty是对Nio的一个封装,关于网络的所有操作都是通过事件的方式完成的.例如连接创建.read事件.write事件都是通过Nio来完成 的.那netty是怎么启动监听的呢? 在什么地方启动的呢?此处不为大家设置悬念,一次性告诉大家.通过循环扫描的方式来实现监听的.具体的方法类位于NioEventLoop的run方法中 (赶紧进去看看吧!! 浅显易懂). 下面是netty的acceptor线程创建连接的代码.位于类NioEventLoop的processSelectedKey中(至于 proc

009-手势触摸事件处理

问题一:iOS中有哪些事件? •在用户使用app过程中,会产生各种各样的事件 •iOS中的事件可以分为3大类型 问题二:什么叫响应者对象? •在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” •UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 问题三:UIResponder内部提供了哪些处理事件的方法来处理事件? •UIRes

AWT事件处理

AWT事件处理基本概念 AWT事件处理过程中,主要涉及3类对象: ①   Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent.其实例在该事件发生时由系统自动产生.每一种事件都对应专门的监听者. ②   Event Source(事件源):事件发生的场所,通常就是各个组件,例如按钮Button. ③   Event Monitor(事件监听器):接收事件对象并对其进行处理的类的对象,通常其中某个成员方法对事件进行相应的处理. 注:

事件处理

本节课我学习到了事件处理机制,事件处理机制就是为了实现对事件的处理,事件处理过程主要涉及事件源,事件和事件处理者,事件源是事件发生的场所,通常是各个组件:事件是对用户界面的操作,如操作键盘是触发的键盘事件:而事件处理者则是对收到的事件进行处理的程序,又叫监听器. 创建按钮监听器并注册的代码如下: ButtonHandler btnHandler = new ButtonHandler(); btn.addActionListener(btnHandler);  //btn为按钮对象 编写按钮的事

iOS中的事件处理

前言:iOS中事件处理,是一个很重要也很难得地方.涉及到响应者链的地方的面试题,很多工作两三年的老鸟也未必能回答的很专业.这里详细介绍一下iOS中的事件处理,以及响应者链. 1. 三大事件 触摸事件 加速计时间 远程控制事件 2. 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为 响应者对象 UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接

iOS学习之事件处理的原理

在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? (1)UITouch 对象的简介 当用户用一根手指触摸屏幕时,会创建一个与手指相关联的 UITouch 对象 一根手指对应一个 UITouch 对象 UITouch 的作用 保存着根手指相关的信息,比如触摸的位置.时间.阶段 当手指移动时,系统会更新同一个 UITouch 对象,使之能够一直保持该手指