TIMEOUT {file.variable | link.number}, time
TIMEOUT ステートメントを使用すると、指定した時間内に読み取るデータがない場合に、READSEQ ステートメントまたは READBLK ステートメントを終了できます。また、ネットワーク・リンクの時間制限を設定するためにも TIMEOUT を使用できます。TTYGET ステートメントと TTYSET ステートメントを使用すると、シリアル通信ポートで開くファイルのタイムアウト値を設定できます。
TIMEOUT ステートメントは Windows ではサポートされません。
file.variable には、順次アクセスで開かれるファイルを指定します。
time は、プログラムが、READSEQ ステートメント、READBLK ステートメント、またはネットワーク接続を終了するまでの待機秒数として評価される式です。
link.number は、ネットワーク・リンクです。1 から 255 間での正の数値です (または、ネットワーク接続について NET_MAXCONNECT VALUE に指定されている数値)。
TIMEOUT は、データの待機中に、time で指定された秒数が経過すると、後続の READSEQ ステートメントおよび READBLK ステートメントを終了し、ELSE ステートメントを実行します。STATUS 関数を使用すると、time が経過したかどうかを判別できます。タイムアウトが発生した場合は、READBLK または READSEQ のどちらもバッファーからのバイトを返さないので、入出力操作の全体が再試行される必要があります。
file.variable または time のどちらかが NULL 値に評価されると、TIMEOUT ステートメントは正しく実行されずプログラムはランタイム・エラー・メッセージを出力して終了します。
TIMEOUT SUN.MEMBER, 10
READBLK VAR1 FROM SUN.MEMBER, 15 THEN PRINT VAR1 ELSE
IF STATUS() = 2 THEN
PRINT "TIMEOUT OCCURRED"
END ELSE
PRINT "CANNOT OPEN FILE"
END
GOTO EXIT.PROG
END
次のプログラム出力が得られます。
TIMEOUT OCCURRED
次の例は、システム ORION へのネットワーク接続に 30 秒のタイムアウトを設定します。
TIMEOUT SYSTEM (1200, "ORION"), 30
OPEN "ORION!/u1/user/file" TO FU.ORIONFILE
READ X,Y FROM FU.ORIONFILE
ELSE
IF SYSTEM (1203)= 81015
THEN PRINT "TIMEOUT ON READ"
END
ELSE
PRINT "READ ERROR"
END
END