一般に、イベントハンドラはどのように機能しますか?


14

これは一般的なトピックです。イベントハンドラどのように機能しますか?

これは、舞台裏を意味します-作成されたときに何が起こるか。

大まかなアイデアはありますが、確認してもらいたいと思います。



ブリリアント、オブザーバーパターンは私が見つけたものでした。この問題についてWebで読み、イベント駆動プログラミングのテーマに関する優れた論文を読みました。このホワイトペーパーでは、ハンドラーデザインパターンのプロセスについて説明します。これにより、Dispatcherに送られるイベントのスチームがあり、Dispatcherはそのイベントを取得して分析し、そのイベントタイプを決定してから、各イベントをそのタイプのイベントを処理できるハンドラーに送信します。
-JHarley1

1
ディスパッチャは、プログラムが閉じられたとき(GUIアプリケーションなど)にのみ停止する無限ループである方法を説明します。そして、GUIフレームワークでイベント駆動型プログラミングを行うために広く使用されているオブザーバーパターン(またはパブリッシュ/サブスクライブパターン)がどのようにあり、ハリウッドの原則「私たちはあなたに電話しないでください」でどのように機能するか。
JHarley1

上記の説明は適切だと思いますか?
JHarley1

場合によります。高レベルの概要については、問題ありません。ただし、包括的かつ徹底的な説明のために、いやいや。もちろん、このような説明は多くの作業のページになります。これは、たとえばWeb対デスクトップのイベントなどに入ることができるため、かなり凝った作業になる可能性があるためです。
JBキング

回答:


15

低レベルでは、イベントハンドラーは多くの場合、デバイスポーリングしてハードウェア割り込みを待機することで機能します。基本的に、バックグラウンドスレッドは、ハードウェア割り込みの発生を待機しながらブロックします。割り込みが発生すると、ポーリング機能はブロックを停止します。その後、アプリケーションは、どのデバイスハンドルが割り込みを引き起こし、どのタイプの割り込みが発生したかを見つけて、それに応じて(イベントハンドラー関数を呼び出すなどして)動作することができます。これは通常、別のスレッドで行われるため、非同期で発生します。

もちろん、これが実際に実装される方法は、OSとデバイス/入力のタイプによってかなり異なります。UNIXシステムでは、ソケット、シリアルポート、USBポートなどのイベントハンドラーを実装する1つの方法は、システムコールの選択またはポーリングを使用することです。1つ以上のファイル/デバイス記述子(ネットワークソケット、シリアル/ USBポートなどのデバイスに関連付けられています)がpollシステムコールに渡されます。これは、低レベルC APIを介してプログラマが利用できます。これらのデバイスのいずれかでイベントが発生すると(たとえば、一部のデータがシリアルポートに到着するなど)、ポーリングシステムコールはブロックを停止し、アプリケーションはイベントを引き起こしたデバイス記述子とイベントの種類を判別できます。

Windowsではこれは異なる方法で処理されますが、概念は基本的に同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.