これは一般的なトピックです。イベントハンドラはどのように機能しますか?
これは、舞台裏を意味します-作成されたときに何が起こるか。
大まかなアイデアはありますが、確認してもらいたいと思います。
これは一般的なトピックです。イベントハンドラはどのように機能しますか?
これは、舞台裏を意味します-作成されたときに何が起こるか。
大まかなアイデアはありますが、確認してもらいたいと思います。
回答:
低レベルでは、イベントハンドラーは多くの場合、デバイスをポーリングしてハードウェア割り込みを待機することで機能します。基本的に、バックグラウンドスレッドは、ハードウェア割り込みの発生を待機しながらブロックします。割り込みが発生すると、ポーリング機能はブロックを停止します。その後、アプリケーションは、どのデバイスハンドルが割り込みを引き起こし、どのタイプの割り込みが発生したかを見つけて、それに応じて(イベントハンドラー関数を呼び出すなどして)動作することができます。これは通常、別のスレッドで行われるため、非同期で発生します。
もちろん、これが実際に実装される方法は、OSとデバイス/入力のタイプによってかなり異なります。UNIXシステムでは、ソケット、シリアルポート、USBポートなどのイベントハンドラーを実装する1つの方法は、システムコールの選択またはポーリングを使用することです。1つ以上のファイル/デバイス記述子(ネットワークソケット、シリアル/ USBポートなどのデバイスに関連付けられています)がpoll
システムコールに渡されます。これは、低レベルC APIを介してプログラマが利用できます。これらのデバイスのいずれかでイベントが発生すると(たとえば、一部のデータがシリアルポートに到着するなど)、ポーリングシステムコールはブロックを停止し、アプリケーションはイベントを引き起こしたデバイス記述子とイベントの種類を判別できます。
Windowsではこれは異なる方法で処理されますが、概念は基本的に同じです。