MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
Dedicated technical support for IF/Prolog ended Dec 31 2008.
This site is maintained as a community service only.
signal(+シグナル,-旧スイッチ,+新スイッチ)
signal(+シグナル,[+オプション,...])
signal_handler(+シグナル,+ハンドラ)
alarm(+時間)
現在IF/Prologは、UNIXオペレーティングシステムの異なるソ−スからのシグナルが扱えます。以下のシグナルはIF/Prologシステムが受け取るようになっており、これらに対するシグナルハンドラを定義することもできます。
interrupt, alarm, user_1, user_2
signal/3は、シグナルハンドリングをonあるいはoffに切り換えます。「旧スイッチ」と「新スイッチ」は、onあるいはoffのいずれかでなければなりません。
シグナルハンドリングがoffの場合にはシグナルハンドラが呼び出されず、そのシグナルは無視されます。この場合、割り込みが起きたことを記録する内部フラグのみが設定されます。IF/Prologは、割り込みハンドリングがoffで端末からの読み込み中に割り込みが起きた場合にはend_of_fileを返します。シグナルによって割り込みされた後で(端末からの)低速入力が自動的に再スタ−トされないような旧型のsystem V Unixにおけるシグナルの実現の場合にも、同様の結果になります。よって端末からの入力と一緒にシグナルを使う場合には、不用なend_of_file情報は捨てるように注意して下さい。
signal/2は、各シグナルに対して内部シグナルフラグを読み込んだり、チェックします。「オプション」は、以下のいずれかになります。
event clear
clear: 特定のシグナルをクリアします
event: シグナルが起きたかどうかをテストします
signal/2は、「オプション」としてeventが使われ、しかも内部フラグが設定されていない場合に失敗します。
alarm/1は、alarmシグナルを「時間」秒後に発生させます。
signal_handler/2を事実としてPrologデ−タベ−スにアサ−トすることによって、Prologの実行中に非同期的に呼び出される割り込みハンドラ (任意のPrologのゴ−ルを呼び出せる) を定義することができます。
stack_watch(Goal, TimeSlice) :-
asserta(signal_handler(alarm,
( print(stdout, 'stack used = %6d\n', [gused]),
alarm(TimeSlice)))),
alarm(TimeSlice),
call(Goal).
atom_expected 「シグナル」はアトムでなければならない
out_of_range 「シグナル」が許されるシグナル名でない
on/off_expected 「新スイッチ」は、onあるいはoffのいずれかでなければならない
integer_expected 「時刻」は整数でなければならない
|