TIMEOUT ステートメント

構文

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