「これはヤバかったな」という遅刻エピソード

UWSCでループの中のループで無限ループにハマってしまいプログラムが終わらなくなった時のために
一定時間経ったら最期の判定に行く前であっても読み込んだUWS自体を強制的に終了させれるようにしたいです

REPEAT

REPEAT
xxxxxxxx  ←ここで無限ループに
UNTIL

UNTIL

上のようになります

また最期のUNTILに
t=GETTIME()
UNTIL ((GETTIME()-t)>=3) //3秒以内に終わらなかったら終了

上のように制限時間を付けても、判定のある最期まで行けないと動かなくなり
使うループの数が多いため
最初の方か最期のほうに数行書くだけでいいように作りたいです

ご教授お願いしますm(__)m

A 回答 (1件)

>また最期のUNTILに


>t=GETTIME()
>UNTIL ((GETTIME()-t)>=3) //3秒以内に終わらなかったら終了
もし上記の、>t=GETTIME() をUNTIL直前に書いているならREPEATに入る前に実行すべきです。


ハマっている処理で何が起きているのか、原因を調べるべきだとは思いますが、
簡単な解決案としてはBREAK、またはTRY-EXCEPTをお勧めします。

//BREAK例
DIM i = 10
REPEAT
 print i
 i = i - 2
 IF i < 0 THEN BREAK
UNTIL i = 5

上記は、ループ終了条件がi=5なのにiが5になる事が無い、ループ終了条件が適切ではない例です。
iが0未満になったらBREAKによりループを抜けさせています。



//TRY-EXCEPT例
DIM i = 10
DIM a = "壱"
TRY
 REPEAT
  print i
  i = i - a
  print i + "2回目"
 UNTIL i < 0
EXCEPT
 print "エラー"
ENDTRY

こちらは、処理そのものがおかしい場合です。文字列から数値を引こうとしているのでエラーになる例です。
大体はUWSC側からオーバーフローなりなんなりのメッセージが表示されますが、処理によっては止まらない場合があります。
処理が継続できないエラーが発生した場合は、EXCEPT内の処理が実行されます。
    • good
    • 0
この回答へのお礼

ありがとうございます
無限ループに入った時の処理の仕方なので私のプログラムには使えないみたいです
すいません

お礼日時:2015/01/04 20:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報