18


4

イベントリスナーはどのように機能しますか?

繰り返し条件をチェックし、条件が満たされたら実行します。 たとえば、USBデバイスが接続されたときにOSが正確に認識する方法、または電子メールを受信したときにMSNが正確に認識する方法。 これはどのように作動しますか?

ありがとう

4 Answer


33


低レベルでは、問題のデバイスがCPUにハードウェア割り込みを送信するため、OSカーネルは何かが発生すると「認識」します。

したがって、たとえばネットワークパケットが到着すると、ネットワークコントローラーが割り込みを送信し、OSカーネルが適切に応答します。

プログラムレベルでは、まったく異なる動作をします。ほとんどのアプリケーションプログラムは、メッセージを取得する「イベントループ」を実行します(たとえば、「マウスがアプリケーションのこのポイントをクリックした」というOSからのメッセージ)。それに応じて適切なアクションを実行し、さらにメッセージをリッスンします。 メッセージがない場合、OSは配信するメッセージがあるまでスレッドをスリープします。


1


依存します。

多くの場合、イベントリスナーは、イベントを生成するオブジェクトに登録されます。 イベントが発生すると、オブジェクトは登録されているすべてのリスナーを反復処理し、イベントを通知します。 たとえば、JavaのAWT / Swingイベントモデルをご覧ください。

_ OSがUSBを取得するタイミングを正確に知っている _

低レベルでは、カーネル/ USBドライバーによって処理されるハードウェアの割り込み(私が間違っていれば誰かが私を修正します)が疑われます。 多くの場合、より高いレベルのシステムがあります(例: DBUS)これをリッスンし、イベントリスナがそれらをリッスンします。

_ または、メールを受信したときにMSNが正確に知る方法。 _

私はそれがメールボックスをポーリングする単純なケースだと思う(例: POP3を介して)x秒ごとにメッセージ数をチェックします(ただし、間違っている可能性があります)。

アノン。 ハードウェア割り込みとソフトウェアレベルのイベントリスニングの違いを非常によく説明しています。


1


http://en.wikipedia.org/wiki/Interrupt [Interrupts] _をご覧ください。これにより、ハードウェアが特定の'events'_を開始する方法が説明されます。


1


電子メールチェッカーのようなプログラムは、通常、バックグラウンドサービスを実行し、X期間ごとに新しいメールをチェックして電子メールサーバーを照会します。 他の方法もありますが、ソフトウェアレベルのイベントの場合、ほぼ確実にそのようなものになります。