NoteDeep

windows处理用户行为的两种方式

消息机制:

核心
消息队列

处理过程
将所有的用户操作, 如点鼠标、按键盘等所有操作按顺序被记录, 装入一个队列

特点
由操作系统维护, 我们需要把消息取出来, 分类处理
有先后顺序

异步选择就是基于消息机制的

事件机制:

核心
事件集合

处理过程
每个操作绑定一个事件, 事件由调用API创建
将事件投递给系统, 让系统监视
如果操作发生, 对应事件就会被标记位有记号
我们检测事件集合, 处理

特点
所有事件都是我们自己定义的, 系统只是将他们置为有/无信号
无序的

事件选择就是应用事件机制

局部事件机制(需要我们绑定), 整体消息机制(全面)


事件选择的逻辑

函数
WSAEventSelect()

第一步
创建事件对象(变量)
函数
WSACreateEvent();

第二步
为每一个事件绑定一个socket以及操作accept、read、close并投递给操作系统, 相当于操作系统单开了一个线程, 我们不用管了:异步
可以模仿fd_set
函数
WSAEventSelect();

第三步
查看事件是否有信号
函数
WSAWaitForMultipleEvents();

第四步
有信号的话就分类处理
函数
WSAEnumNetworkEvents();

事件
FD_WRITE:只在accept之后立即产生一次

优化思路:

有序处理
相对有序, 让大家再第一个循环都能得到处理
每次传递一个事件

增加事件列表
创建多线程、线程池

增加事件数量
一组上限由WSAWaitForMultipleEvents()决定, 无法变大
如果一个一个投递, 那么就可以变多了
或者一组一组投递

事件选择模型和select模型










评论列表

    windows处理用户行为的两种方式事件选择的逻辑
    事件选择模型和select模型