イベント (プログラミング)
テンプレート:出典の明記 イベント (テンプレート:Lang-en-short) とは、コンピュータ・プログラムの実行に際し、(プロセス間で共有するイベントカウンタのインスタンスが条件を満たしたときなど)何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。
イベントドリブン
イベントドリブン (イベント駆動型、テンプレート:Lang-en-short) とは、イベントに応じて選択的にインスタンスへの処理(メソッドの実行)やコンテクストの切り替えを行う方式である。 アクションの例としては、キーボードが押されたり、マウスがクリックされたりした場合にイベント信号が押したキーのデータとともに発信され、これを起爆剤として他のプログラムが動かされたりするようにプログラムするイベント駆動型プログラミングとすることが多い。
実際にイベント処理を言語の仕様として組み込んでいるプログラム言語では、特定のアクションが発生した場合に呼び出される関数のインタフェースが決まっており、プログラマはインタフェースを除いてこの関数の中身を自由に記述することでイベントを表現することができる。
排他制御におけるイベント
Windows(Win32系)のGDI32におけるアプリケーションのプログラミングでは、プロジャーよりイベントのインスタンスを受け取り関連のメソッドを実行し再びプロジャーにもどるポーリング的な手法が用いられている。 Windows(Win32系)のイベントと呼ばれるオブジェクトがある。このオブジェクトは、前述のイベントドリブンとはなんら関係ない。イベントオブジェクトは、そのオブジェクトがシグナルされる事により、待機状態にあるスレッドを再開させるなど待機状態にある処理を起動する目的に使われる。プロセス間をまたいでイベントオブジェクトを共有できる事から、プロセス間通信に多用される。
イベント的事象を伝達する事に特化しており、待機中スレッドがイベント待ちから開放された時、自動的にイベントを非シグナル状態にするといった機能がある。セマフォと似ているが、決定的な違いは、イベントは資源数が常に1であり、また伝達できる情報はシグナル発生のみである点である。
イベントは、各APIごとに次のようなクラスまたは関数を通して提供されている。
- Windows API -
CreateEvent()
- MFC -
CEvent
クラス - .NET Framework -
System.Threading.AutoResetEvent
クラス、System.Threading.MaualResetEvent
クラス