曹娥做系统是如何感知事件的???

原创 2015年07月10日 08:28:06

我们知道,java中提供了事件机制,即:每一个动作,都产生一个事件。

那么,操作系统是如何感知事件的呢???

针对于一些问题:


问题:

1.“一般我们在开发窗体程序时,只需对按钮等绑定相应的操作事件监听,之后按钮就可以相应鼠标操作
但我想知道的是,操作系统底层又是如何知道按钮被鼠标点击了呢?

难道是操作系统对窗口中的任何元素都在毫秒级的监控着,比如监控按钮A,当发现按钮A上方有鼠标指针
这时就相当于监控到onmouseover,而当鼠标点击时,系统知道操作的对象是鼠标下方的按钮A,而不是其它按钮

不知正确否,请指点!谢谢 


2.如何看待java中的这一机制:即:  :::   动作-------》触发事件---->监听器:注册和处理事件???

现在理解这句话:点击该按钮是,JButton 对象触发一个ActionEvent,然后将它作为参数传递以调用监听器的actionPerformed()方法来处理这个事件。

其实,这是java自己的抽象。


要是深入的理解:

要点:只有从操作系统和汇编的角度,才能看透一些底层问题:

                    只有从操作系统的角度才能理解:

                 从汇编的角度: 那即是:     发出中断--------中断处理程序



()中断->鼠标驱动->raw input thread->应用程序的线程

()++这个是中断芯片控制的 打个比方你键盘 按下一个键 中断芯片就会发送一个中断信号给CPU 然后在发送一个中断量给CPU 然后CPU根据操作系统底层根据中断量跳转到预先设置的对应的中断任务( 至于怎么跳转这个涉及到段寄存器方面的知识 请自己去查了 三言两语说不清楚 ) 然后中断任务会去调用键盘或者鼠标驱动 ,然后形成一个事件 压入操作系统的事件队列 然后操作系统在分派给相应的应用程序线程


()CSRSS进程的线程RawInputThread 中 调用CreateFile() 

CreateFile 是个系统调用 

通过 sysenter 或者int 2e 进入内核模式  kiFastSystemCall 或(通过IDT) KisystemService 在ssdt索引

找到并调用NtCreateFile …  打开鼠标类驱动的设备\Device\PointerClass0

RawInputThread 执行ReadFile()  同样是个系统调用 …  进入内核模式的NtReadFile 

产生一个IRP_MJ_READ  然后WaitForSingleObject等在这里

IRP进入鼠标端口驱动i8042prt.sys 被挂入未完成队列

按下鼠标 ->设备中断  

进入IDT    中断号x4 获得获得中断门描述符地址

根据中断门里的段选择子 -> 在GDT中索引 ->得到段描述符->得到段地址 + 中断门里的 偏移

进入 KiInterruptTemplate  -> INT_PROLOG   … -> jmp KiInterruptDispatch@0

->call ServiceRoutine (由鼠标小端口驱动提供的中断服务例程)  调用鼠标类驱动提供的函数上交数据
  
鼠标类驱动完成IRP

NtReadFile继续执行 返回用户模式

RawInputThread得到鼠标位信息


按钮是个窗口

窗口的数据结构是 typedef struct _window_object {…}

里面有个MessageQueue  指向所属线程的报文队列结构 USER_MESSAGE_QUEUE  里面有七种用途的七个报文队列

报文队列结构 每线程一个  一个线程可以有多个视窗     一个线程中所有的窗口的窗口结构都 指向同一个报文队列

………………

按下按钮会触发postmessage 或 sendmessage(强制调用目标窗口的处理函数) 

postmessage把报文挂入 目标窗口的线程的报文队列  目标窗口通过getmessage得到  …………





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#捕获windows关机事件,在系统关机前做一些自己想做的事

C#捕获windows关机事件,在系统关机前做一些自己想做的事;有些时候我们可能想在Windows关机时记录或处理一些事情,这里提供几种方法。方法一: /// /// ...

Unity游戏UI框架(八):监听事件系统

在这里会用到UIEventListener处理事件, Unity官方文档:http://docs.unity3d.com/460/Documentation/Manual/SupportedEven...

Unity事件系统实现长按

  • 2017-07-10 09:10
  • 11KB
  • 下载

Unity5.0 EventSystem事件系统的详细说明

干货丨Unity5.0 EventSystem事件系统的详细说明 unity5.0开发了新的UI系统UGUI,附带的事件系统EventSystem不仅可以用于UI,对于场景中的对象也同样适用...

VB 对象的系统事件

  • 2010-06-07 09:43
  • 64KB
  • 下载

Unity5.x EventSystem事件系统

一、EventSystem对象的说明 当我们在场景中创建任一UI对象后,Hierarchy面板中都可以看到系统自动创建了对象EventSystem,可以看到该对象下有三个组件:EventSystem、...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)