web-dev-qa-db-ja.com

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

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

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

大まかな考えはありますが、確認してもらいたいのですが。

14
JHarley1

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

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

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

15
Charles Salvia