2017年2月12日日曜日

[UWSC]タイムアウト関数 [自作関数]

初心者のプログラミング導入のため、簡単な自作関数を作って公開しているブログ。今回は、設定した時間経過したかどうかを判定するタイムアウト関数です。

記事の内容

○タイムアウト関数
    戻値(int)=timeout(s,tout)

UWSCは主に非同期プログラム用ということで多少ビビっております。
そこでタイムアウトの判定を頻繁に行うであろうと思い、関数にしておくことにしました。

●タイムアウト関数

自作関数timeout s=GETTIME()
R=timeout(s,15)   15秒以上経ってたらRには1が代入される
FUNCTION timeout(s,tout)
   if (GETTIME()-s)>=tout
    RESULT=1
   else
    RESULT=0
   endif
FEND

呼び出し側からは、例えば、
 s=GETTIME()
 while (timeout(s,5)=0)

  ここに色んな命令を書く

 sleep(0.1)
 wend
などとして、ループにタイムアウト機能を持たせます。

その他プログラム中にある命令・関数
sleep(n)n秒間何もしないというUWSC特有の命令です。
s=GETTIME()その時点の時刻(秒単位)を得るUWSCに搭載されている関数です。
while (条件)
wend
条件が成り立っている間はwhile~wendの間をループし続ける命令です。
これは大抵の開発環境にあるループ命令です。

ここで作ったタイムアウト関数は秒単位ですが、
GETTIME()関数はミリ秒を測ることもでき、それを使って高精度に判定することもできますが、
タイムアウト程度なら不要かなと思い、上のようにしました。

あとループ中にsleep(0.1)と0.1秒間スリープさせているのは、
UWSCのように他のソフトを制御する場合、
コンピュータの演算能力を他のアプリケーションプログラムに渡してそちらを進める必要があるためです。
これはUWSC特有の処理です。
例では、ループ1回につき0.1秒間の“何もしない時間”ができあがることになります。


記事の内容

記事の内容は伝わりましたでしょうか。
○タイムアウト関数
    戻値(int)=timeout(s,tout)


関数群のダウンロードはこちら
func_poku.uwsのコメント欄に呼び出し方が書いてあります。


【関連記事】  [UWSC]よく使う記号をグローバル宣言
[UWSC]配列の最大要素を返す関数
[UWSC]文字列操作あれこれ2
[UWSC]文字列操作あれこれ





0 件のコメント:

コメントを投稿