タイマーを使おう〜NS Basic/Palm 5.02

2005/12/02


2005年 8月にNS Basic/Palmのバージョンが 5.01から5.02に上がりました。
数字の上では単なるマイナーバージョンアップのようですが、「タイマー」という新しい機能が追加されており、内容的には画期的なバージョンアップでした。
やや遅くなりましたが、ここで使い方を説明します。
尚、当然のことながら、検証にはVer.5.02以降のNS Basic と ランタイムが必要です。

タイマーの機能は至ってシンプルです。
簡単に言えば「一定時間後にイベントを発生させる」という機能です。
時間のセットは、次のコマンドで行います。
    SysInfoSet("Timer",n )
引数 n は時間で、ミリ秒で指定します。
簡単に言えば、1秒なら1000、2秒なら2000、500なら0.5秒ですが、NS Basicでコンマ1秒単位の正確な細かな処理を期待する人は居ないでしょうから、そのあたりは適当に指定して下さい。

時間をセットしたら、後はイベントの発生を待つだけです。

イベント処理はボタンや画面のタップと同じように、フォームの eventsモジュールに記述し、getEeventType()関数で判定します。
getEventType()の戻り値が「nsbTimer」だったら、タイマーによるイベントという事になります。
例えば、
    If getEventType()=nsbTimer then
    
          MsgBox "時間だよ"
    
    End If
こんな感じです。

タイマーイベントは繰り返し発生する訳ではなく、1回だけの使い捨てです。
もし、連続してタイマーイベントを発生させたい場合は、次のように、その都度、新たに指定しなければなりません。
    If getEventType()=nsbTimer then
    
          X = X + 1
          Label1004.Text = Str(X)
          SysInfoSet("Timer",1000)
    
    End If

タイマーは、ゼロを指定するかプログラムを終了させると破棄されます。
したがってPalm標準のアラームのような事は出来ません。
また、オートパワーオフで電源が切れた場合は、タイマーも一時停止状態になりますので、アラームのようなものは作れません。
ちなみに、イベントコード内で、Chr(18)のキー入力処理を無効にすれば、オートパワーオフを一時的に無効にできます。
    'オートパワーオフを無効にする例
    If getEventType()=nsbKeyorButton then
    
          strKey = getKey()
    
          If Asc(strKey)=18 Then
               SetEventHandled
          End If
    
    End If
これを利用すれば、アラームのようなものを作る事は出来ますが、アプリを終了し忘れると、最悪の場合、バッテリー切れを起こしてデータが失われてしまう危険性もありますので、あまりお勧めはしません。
ちなみ「ういるす」というGraffiti入力練習ゲームに搭載されている「百マス練習帳」は、スパルタモードで利用すると100文字入力し終わるまで電源も切れないようになっているように見えますが、実際は、このタイマー機能を使って、一定時間過ぎるとスパルタモードが解除されるよう、安全策を施してあります。


今までは、連続した動作を行うプログラムを作ろうとすると、FormのAfter()モジュール内でループさせ、イベントが発生したら適宜、ループを抜けるしか無かったわけですが、このタイマー機能を使えば、もっと簡単に実現できます。
手前味噌でナニですが、拙作の「ばんめに」や「ういるす」などはタイマーのおかげでかなり簡単に開発できました。
まだ、Ver.5.x未満をお使いの方、このタイマー機能はとても便利ですので、是非、バージョンアップをされる事をお奨めします。