事件选择模型
windows处理用户行为的两种方式
消息机制
核心:消息队列
处理过程:所有的用户操作,比如点鼠标,按键盘,对软件进行的各种操作…等等,所有操作均依次按顺序被记录,装进一个队列。不同的操作对应着不同的编 。
特点:消息队列由操作系统维护,用户进行操作,然后把消息读取出来,分类处理。有先后顺序。动态的。
异步选择模型就是基于这个消息的。
事件机制
核心:事件集合
处理过程:根据需求我们为用户的特定操作绑定一个事件,事件由我们自己调用API创建,需要多少创建多少。
将时间投递给系统,系统就帮我们监视着,所以不能无限创建,太多了系统运行就卡了。
如果操作发生了,比如用户按鼠标了,那么对应的事件就会被置成有信 ,也就是类似1变2,用个数来标记。
直接获取到有信 的时间进行处理。
特点:所有时间都是咱们自己定义的,系统只是帮咱们标记有无信 。无序。
事件选择模型,就是应用这个。
事件选择
整体类似于select
-
创建一个事件对象(变量),WSACreateEvent
-
为每一个事件对象绑定socket以及操作accept,read,close…
投递给系统让其监管,WSAEventSelect
-
查看事件是否有信 ,WSAWaitForMultipleEvents
-
有信 就分类处理,WSAEnumNetworkEvents
创建一个事件对象
例:
就是定义了一个事件类型。
HANDLE(void *通用类型指针),句柄,句柄的本质是ID,内核对象,唯一的标识符。
内核对象:内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口(百度百科)。
当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的**句柄**
关闭/释放事件句柄
不用就要释放
例:
指定事件主动置成无信 的
指定事件主动置成有信 的
绑定并投递
功能
给事件绑上socket与操作码,并投递给操作系统。
参数1
被绑定的socket,最终每个socket都会被绑定一个事件
参数2
事件对象,逻辑,就是将参数1和参数2绑定在一起
参数3
具体事件
返回值
询问事件
功能
获取发生信 的事件。
参数1
事件个数,定义事件列表(数组)个数。
可以变大,不像select模型,直接就能变大,因为select模型本身就是个数组,直接遍历即可, 比较直接,而事件选择是按照异步来投放,由系统进行管理,咱们就不能随便修改了,要按照规则来。
参数2
事件列表。
参数3
事件等待方式。
参数4
超时间隔,以毫秒为单位。与select参数5意义相同。
参数5
返回值
列举事件
获取事件类型,并将事件上的信 重置,accept,recv,close等
例:
参数1
对应的socket
参数2
对应的事件
参数3
触发的事件类型在这里装着。是一个结构体指针。
返回值
事件分类处理逻辑
有序处理
优化
for (i = Index; i EventTotal; i++声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!