コンソール・イベント・ハンドラに対する提案

CTRL/C イベント処理は,Windows オペレーティング・システム上で実行されるプロセスのスレッド特性のため,基本的に信頼性がありません。ユーザーが CTRL/C をタイプした時に何が起きていていたのかに依存して,イベント・ハンドラは実行の機会を得ることができたり,できなかったりします。どのような場合でも,そうしたいのであれば,ハンドラを確立するための 2 つの方法があります。Win32 ルーチン SetConsoleCtrlHandler を直接呼び出すか,C SIGINT または SIGBREAK シグナルに対してハンドラを確立するために SIGNALQQ を使用することができます。

Fortran 実行時システムは,実行時初期化処理の一部としての SetConsoleCtrlHandler の呼び出しを通してコンソール・イベント・ハンドラを確立します。ハンドラの動作の説明については,「基本コンソール・イベント処理」を参照してください。

自分のハンドラを確立するために SetConsoleCtrlHandler を呼び出すと,そのハンドラがコンソール・イベントの最初に呼び出されます。

SIGINT または SIGBREAKSIGNALQQ を通してハンドラを確立する場合,C 実行時システムは SetConsoleCtrlHandler への呼び出しを通してコンソール・イベントに対して内部ハンドラを確立し,イベントが発生した時に取る希望する動作としてユーザーのルーチンを記録します。イベントが C 実行時ハンドラに送られると,シグナルに対する動作を SIG_DFL にリセットし,ユーザーのハンドラ・ルーチンを呼び出します。

コントロール・イベントから継続したい場合,自分のルーチンに動作をリセットするために SIGNALQQ を再び呼び出さなければなりません。ハンドラは,引数としてシグナル・コード (SIGINT または SIGBREAK) で呼び出されます。自分のルーチンが C 実行時イベント・ハンドラに戻った後,C ハンドラはイベントが処理されたことを示す値 TRUE をオペレーティング・システムに返します。