関数は、次のように呼び出します。
|
INTEGER*4 alarm n = alarm ( time, sbrtn ) |
|||
|
time |
INTEGER*4 |
入力 |
待ち時間の秒数 (0 の場合は呼び出さない) |
|
sbrtn |
ルーチン名 |
入力 |
実行する副プログラムは EXTERNAL 文で宣言しなければならない |
|
戻り値 |
INTEGER*4 |
出力 |
前回呼び出した alarm の残り時間 |
例: alarm の使用例 - 9 秒待機してから sbrtn を呼び出します。
integer*4 alarm, time / 1 /
common / alarmcom / i
external sbrtn
i = 9
write(*,*) i
nseconds = alarm ( time, sbrtn )
do n = 1,100000 ! alarm が sbrtn をアクティブにするまで待機
r = n ! (時間がかかる計算)
x=sqrt(r)
end do
write(*,*) i
end
subroutine sbrtn
common / alarmcom / i
i = 3 ! このルーチンでは I/O を行わない
return
end
|
参照: alarm(3C)、sleep(3F)、signal(3F)。次の制限事項に注意してください。
サブルーチンは自分自身の名前を alarm に渡すことはできません。
alarm ルーチンは、入出力に干渉する可能性のあるシグナルを発生させます。呼び出されたサブルーチン (sbrtn) では、いっさい入出力を実行してはいけません。
Fortran の並列プログラムまたはマルチスレッドプログラムから alarm() を呼び出すと、予期しない結果を招くことがあります。