2010-07-05 186 views
17

他们是否重复检查条件并在条件满足时执行。例如,操作系统如何确切知道何时插入USB设备,或MSN如何确切知道您何时收到电子邮件。这个怎么用?事件侦听器如何工作?

谢谢

回答

31

在低级别,OS内核“知道”什么时候发生,因为有问题的设备向CPU发送硬件中断。

因此,当一个网络数据包到达时,网络控制器会发送一个中断,并且OS内核会根据情况作出响应。

在程序层面上,它的工作原理完全不同 - 大多数应用程序运行一个“事件循环”,在这里他们获取一条消息(比如说,一条来自操作系统的消息说“鼠标在你的应用程序的这一点上被点击了“),对此做出相应的操作,然后再听取更多消息。如果没有消息,操作系统会休眠该线程直到它有消息要传递。

+2

+1为了清楚地解释硬件级别的事件监听器和软件级别的事件监听器之间的差异。 – Pete 2010-07-05 21:57:35

1

取决于。

一个事件监听器通常在生成事件的对象上注册。当事件发生时,对象遍历所有注册的侦听器,通知它们事件。例如,查看Java中的AWT/Swing事件模型。

流的OS知道什么时候它得到一个USB

处于较低的水平,我怀疑那是一个硬件interupt(有人纠正我,如果我错了),这是由内核/ USB处理驱动程序。通常有更高层次的系统(例如DBUS)监听此事件,并让事件监听器监听它们。

或MSN如何确切知道您何时收到电子邮件。

我怀疑这是一个简单的例子,每隔x秒轮询邮箱(例如通过POP3)并检查邮件数量(尽管可能是错误的)。

Anon。解释了硬件中断与软件级事件监听之间的差异。

1

看看Interrupts这应该解释硬件如何启动某些“事件”

0

程序,如电子邮件跳棋通常会运行查询他们的电子邮件服务器的每X周期检查新邮件后台服务。还有其他方法可以做到这一点,但对于软件级别的事件,几乎肯定会是这样的。