「コールバック関数って何?」の編集履歴(バックアップ)一覧はこちら
「コールバック関数って何?」(2010/07/24 (土) 02:03:47) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
コールバック関数は、事前に登録しておき、その後必要に応じて呼ばれる関数のことである。
Windowsでは、メッセージのやり取りによって、各イベントがおこる。
このとき、受け取ったメッセージを処理するのがウインドウプロシージャである。
これは次のような図で考えると分かりやすい
#image(proc.jpg)
コールバック関数
>Sub Call()
>MessageBox(0,"",0,0)
>End Sub
>
>Sub test(callbackfunc As *Sub())
>callbackfunc()
>End Sub
>
>test(AddressOf(Call))
>
コールバック関数は、事前に登録しておき、その後必要に応じて呼ばれる関数のことである。
通常、関数やプロシージャなどは、プログラム内のコードから呼び出され実行される。一例としてsin()、Math.sin()
などの三角関数は、print sin(pi)などのようにプログラム内で記述が現れた際に実行される。
一般的な関数は、すべて手続きに従って呼び出され実行される。
これに対して、コールバック関数は通常の手続きの流れとは異なり、関数がプログラム内部の
主としたフロー内から呼ばれないものの事を指す。
コールバック関数は、与えられた関数名を予め登録しておき、主たる処理のフローとは個別に、
何らかの処理が必要になった場合に、システムによって呼び出される。
この仕組みは割り込みなどの仕組みに応用出来る。
コールバック関数は、言語上、明確に区別されるものではなく、外部から何らかの関数が呼び出される
性質を持つ関数について言い、特にWinodws環境において表現する事が多い。
コールバック関数は、Windows環境のWin32APIを利用する際に良く現れる。
Windowsでは、メッセージのやり取りによって、各イベントがおこる。
このとき、受け取ったメッセージを処理するのがウインドウプロシージャである。
これは次のような図で考えると分かりやすい
#image(proc.jpg)
コールバック関数
>Sub Call()
>MessageBox(0,"",0,0)
>End Sub
>
>Sub test(callbackfunc As *Sub())
>callbackfunc()
>End Sub
>
>test(AddressOf(Call))
>
この例では、test()はコールバック登録と呼び出しが行われている。実際には登録と実行は区別される。
Call()は呼び出される関数で、Call()がコールバック関数に該当する。