一定時間ごとに処理をする方法

一定時間ごとに処理をさせるためにはSLEEP関数を利用すれば簡単に実現できます。

しかし、一定時間経過するまでの間に他の処理をさせようとすると単純なSLEEP関数ではどうにもなりません。

ここでは一定時間経過するまでに他の処理をすることも可能なサンプルを紹介します。

GETTIME関数は2000年1月1日から何秒経過したかを調べることができます。

この仕組みを利用し、現在の経過秒数から前回の経過秒数を引いて経過秒数を得ます。

GETTIME関数の仕様のため1秒単位の精度になります。

 

一定時間ごとに処理をするサンプル

基本的にループを考慮していますが1回だけの処理もできるようにしました。サンプル中のコメントを参考にしてください。

interval = 10 // 何秒ごとに処理をするか
lastTime = GETTIME() // 初回で予期せぬ動作を防ぐために必要
WHILE !GETKEYSTATE(VK_ESC) // ESCキーを押すことでスクリプトのループから抜ける
 now = GETTIME() // 現在の経過秒数を取得
 IFB (now - lastTime) >= interval // 一定時間以上経過したかチェック
  // ここに処理を書く
  PRINT "一定時間経過しました" // 確認用にメッセージを表示させてみる
  lastTime = GETTIME() // 前回の処理完了時刻を更新
  // BREAK 1 // この命令を有効にすれば1回だけしか処理をしなくなる
 ENDIF
 SLEEP(1) // 1秒ごとに調べるためにウェイトを入れる
WEND

 

GETTIME関数リファレンス

GETTIME関数のリファレンスをマニュアルから転載します。

戻値 = GETTIME( [±n日, 基準日] ) 
引数
 ±n日: nを指定すると当日もしくは基準日からプラスマイナス n日とする、小数点以下は時間(デフォルト=0)
 基準日: 指定された日付を基に日付を設定する (デフォルト=当日)
      ("YYYYMMDD" or "YYYY/MM/DD" or "YYYY-MM-DD" or "YYYYMMDDHHNNSS" or "YYYY/MM/DD HH:NN:SS")
戻値
 2000年1月1日からの秒数を返す

 値がセットされる特殊変数
  G_TIME_YY    // 年
  G_TIME_MM    // 月
  G_TIME_DD    // 日
  G_TIME_HH    // 時
  G_TIME_NN    // 分
  G_TIME_SS    // 秒
  G_TIME_ZZ    // ミリ秒
  G_TIME_WW    // 曜日 (0:日曜....6:土曜)
  G_TIME_YY2   // 年をxxの文字型
  G_TIME_MM2    // 月をxxの文字型
  G_TIME_DD2   // 日をxxの文字型
  G_TIME_HH2   // 時をxxの文字型
  G_TIME_NN2   // 分をxxの文字型
  G_TIME_SS2   // 秒をxxの文字型
  G_TIME_ZZ2   // ミリ秒をxxxの文字型
  G_TIME_YY4   // 年をxxxxの文字型

 

BREAK命令リファレンス

BREAK命令のリファレンスをマニュアルから転載します。

 BREAK [定数]   
 多重ループ中にて定数が指定された場合に、その定数分ループをBREAKする (デフォルト 定数=1)