11.1. タイムアウト処理を入れる

Pocket

11.1. タイムアウト処理

いよいよマクロも複雑になり、例外処理が必要な状況になってきました。

例外処理というのは簡単に言うと、「変な事が起きた時の動作」ということになります。

プログラムやマクロはいつもいつも想定通りに動くとは限らず、結構な確率で変な事が起きるのです。

結構な確率で変なことが起きるくせに、変な事が起きるたびにマクロが止まっていたのでは、どうしようもありません。

そこで、例外処理というのが必要になってきます。

 

11.1.1. タイムアウトとは

タイムアウトとは、「今やってることを諦める」という動作のことを言います。

例えば、

 

というコマンドを書いていた場合、画面上に#が現れなかったり、取りこぼしたりしてしまうと、マクロはずっとwait “#”で止まってしまいます。

止まってしまうといつまでも次の処理には進めないので、マクロも停止せざるをえません。

それだと効率が悪いので、「ある程度の時間が経つと諦めていいよ」というのをマクロに教えるのがタイムアウトです。

 

11.1.2. タイムアウトのコマンド

タイムアウトは非常に簡単に書くことができます。

これで、秒数分の時間が経過したら次の処理に行きなさいね、ということをマクロに教えることができます。

ただし、タイムアウトを認識してくれるコマンドは限られていて、wait系のコマンドか、 recvlnコマンドだけです。

以下が、timeoutを認識するコマンドです。

recvln, wait, wait4all, waitevent, waitn, waitln, waitrecv, waitregex

 

11.2. タイムアウトを入れる

それでは、実際に例外を起こして、タイムアウトの動作を見てみたいと思います。

 

11.2.1. タイムアウトがないときの動作

まずは、timeoutを入れずに、「変なこと」を人為的に起こして、どうなるかを見てみたいと思います。

下記はこれまでに作成したマクロです。

 

96行目で

 

で>が表示されるのを待っています。

ここでわざと、表示されるはずのない<を待ってみることにします。

以下のように書き換えてみます。

 

これで、実際に動かしてみましょう。

スクリーンショット 2014-12-11 19.56.38

この画像のように、ずーっと

 

のままで停止しています。

これは、マクロが表示されるはずのない<を永久に待とうとしているからです。

これでルータがtelnetタイムアウトをしてくれば、エラーとなって処理が終了することになります。

 

11.2.2. タイムアウトを投入

では、実際にtimeout処理をマクロに組み込んでみます。

今回はタイムアウトまでの時間を10秒に設定します。

先ほどのずーっと待つ状態と比べてどうなるかを見てみます。

 

この画像のように、次のステップに進んでいますね。

スクリーンショット 2014-12-11 20.00.23

これは10秒間だけ、<が表示されるのを待って、10秒経ったので、諦めたということになります。

Pocket