イベント (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

イベント (: event) とは、コンピュータ・プログラムの実行に際し、(プロセス間で共有するイベントカウンタのインスタンスが条件を満たしたときなど)何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)を指す。

イベントドリブン[編集]

イベントドリブン (イベント駆動型、: event-driven) とは、イベントに応じて選択的にインスタンスへの処理(メソッドの実行)やコンテクストの切り替えを行う方式である。アクションの例としては、キーボードが押される、マウスがクリックされる、などがある。アクションが発生すると、イベント信号が付帯情報(キー種別やボタン種別などのデータ)とともに発信される。また、アクションを起爆剤としてさらに他のプログラムコードが動かされたりするようにプログラミングすることをイベント駆動型プログラミングと称することが多い。

実際にイベント処理を言語の仕様として組み込んでいるプログラム言語(たとえばC#など)では、特定のアクションが発生した場合に呼び出される関数インタフェースが決まっており、プログラマはインタフェースを除いてこの関数の中身(イベントハンドラー)を自由に記述することでイベントを表現することができる。

排他制御におけるイベント[編集]

Windows(Win32系)のGDI32におけるアプリケーションのプログラミングでは、プロシージャ(Procedure)にてイベントのインスタンスを受け取り[要説明]、関連のメソッドを実行し、再びプロシージャにもどるポーリング的な手法が用いられている。Windows(Win32系)には、「イベント」と呼ばれるカーネルオブジェクトがあり、「Win32イベント」と呼ばれることもある。このオブジェクトは、前述のイベントドリブンとはなんら関係ない。イベントオブジェクトは、そのオブジェクトがシグナル(発信)されることにより、待機状態にあるスレッドを再開させるなど、待機状態にある何らかの処理を起動する目的に使われる。また、プロセス間をまたいでイベントオブジェクトを共有できることから、スレッド間通信のみならずプロセス間通信にも利用される。

Win32イベントはイベント的事象を伝達することに特化しており、待機中スレッドがイベント待ちから解放されたとき、自動的にイベントを非シグナル状態にするといった機能がある。セマフォと似ているが、決定的な違いは、イベントは資源数が常に1であり、また伝達できる情報はシグナル発生のみである点である。

イベントは、各APIごとに次のようなクラスまたは関数を通して提供されている。

  • Windows API - CreateEvent()関数(HANDLE型オブジェクト)
  • MFC - CEventクラス
  • .NET Framework - System.Threading.AutoResetEventクラス、System.Threading.ManualResetEventクラス

関連項目[編集]