事件监听器如何工作?

时间:2010-07-05 21:43:01

标签: c++ c events

他们是否反复检查条件并在条件满足时执行。例如,操作系统如何确切地知道何时插入USB设备,或者MSN如何确切地知道您何时收到电子邮件。这是如何工作的?

由于

4 个答案:

答案 0 :(得分:33)

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

因此,当网络数据包到达时,网络控制器会发送一个中断,并且操作系统内核会在适当时做出响应。

在程序级别,它的工作方式完全不同 - 大多数应用程序运行“事件循环”,在那里他们获取消息(例如,来自操作系统的消息说“在应用程序的这一点上点击了鼠标” ),执行适当的操作以响应该操作,然后,收听更多消息。如果没有消息,操作系统将休眠该线程,直到它有一条要传递的消息。

答案 1 :(得分:2)

看一下 Interrupts 这应该解释硬件如何启动某些'事件'

答案 2 :(得分:1)

取决于

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

  操作系统确切知道何时获得USB

在低级别我怀疑是硬件中断(有人纠正我,如果我弄错了),这是由内核/ USB驱动程序处理的。通常有更高级别的系统(例如DBUS)可以监听它并让事件监听器听取它们。

  

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

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

匿名。解释了硬件中断和软件级事件监听之间的区别。

答案 3 :(得分:1)

电子邮件检查程序等程序通常会运行后台服务,每隔X个时间段检查一次新邮件。还有其他方法可以做到这一点,但对于软件级事件,它几乎肯定会是这样的。