多くのWindowsのプログラムは、「アイコンがクリックされた」、「マウスが動かされた」、「キーが押された」などのイベントに応じて、ダイアログを表示したり、音をならしたりする、イベント駆動型(イベントドリブン)のプログラムになっています。
Windowsはイベントが発生すると、そのイベントの種類を示すメッセージをアプリケーションに送ります。アプリケーションはメッセージを受け取ることでイベントが発生したことを確認し、それぞれの処理を行います。
本書ではWindowsからメッセージを順番に受け取り、個々の処理へ分岐する部分(VBならDoEvents,に相当し、VCならGetMessage()とDispatchMessage()を行う部分) をメッセージポンプと呼ぶことにします。
メッセージポンプはVCやVBで通常プログラムすると、VCやVBのフレームワークに隠蔽されていますが、このメッセージポンプが上手く動作しないと、Windowsのアプリケーションは意図しない動作を行うアプリケーションになります。
例えば、あるメッセージを処理するルーチンが処理に時間がかかり復帰しない場合、その間に発生したイベントをアプリケーションはWindowsから受け取ることができないため、そのイベントの処理ができません。
例) メッセージ1、メッセージ2の順番でメッセージがWindowsから送られる場合、メッセージポンプはメッセージ1を取り出し、メッセージ1用のサブルーチンを呼び出します。
そして、そこから復帰してくると次のメッセージ (メッセージ2) を取り出し、メッセージ2用のサブルーチンを呼び出します。
このとき、メッセージ1の処理が長い時間かかる場合、メッセージポンプへ復帰できないので、メッセージポンプ2の処理ができません。
このような場合に、メッセージポンプを強制的に動作させてください。 (VBならDoEvents, VCならGetMessage()とDispatchMessage()を呼ぶ)
Windowsのアプリケーションはアプリケーションが上手くメッセージポンプを動かすことを前提に作られたOSです。WinGP SDKは例に示したようなことが起こらないように、時間のかかる処理の場合、関数内でメッセージポンプを動かしています。