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

一定時間ごとに処理をさせるためには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)

 

処理に何秒かかったか計算する方法

処理に何秒かかったか計算するにはGETTIME関数を利用し、処理完了時の時刻から処理開始時の時刻を引くことで求めることができます。

秒単位での取得になるので極めて短時間で完了する処理には向いていません。

 

処理に何秒かかったか計算するサンプル

10000回乱数を求め、処理にかかった時間を表示します。

start = GETTIME()
FOR i = 1 TO 10000
 PRINT i + ":" + RANDOM(100)
NEXT
stop = GETTIME()
PRINT stop - start + "秒かかりました"

処理に何秒かかったか計算する方法の結果

 

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の文字型

今日の日付を8桁の数字にする方法

今日の日付を8桁の数字にするためにはGETTIME関数を利用します。

GETTIME関数の標準機能では8桁の数字で取得することができないので、GETTIME関数で得られた結果を加工することで8桁の数字にします。

GETTIME関数を利用することで特殊変数にどのような値が格納されるかリファレンスを参照してください。

 

今日の日付を8桁の数字にするサンプル

正確には8桁の数字の文字列です。

ファイル名等に利用する場合は文字列のほうが便利です。

このサンプルは20140423のような文字列を生成します。

GETTIME()
str = "" + G_TIME_YY + G_TIME_MM2 + G_TIME_DD2
PRINT str

今日の日付を8桁の数字にする方法実行結果

 

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の文字型

 

今日が何曜日なのか文字列で表示する方法

今日が何曜日なのか文字列で表示させたい場合はひと手間かける必要があります。

GETTIME関数で得られる曜日は日曜日が0、月曜日が1、(中略)、そして土曜日が6といった数値です。 そこに文字列の配列で曜日情報を用意しておけば、G_TIME_WWと組み合わせることで曜日の文字列を得られます。

おまけで明日の曜日を表示する方法も載せておきます。

 

今日の曜日を文字列で表示するサンプル

DIM day[] = "日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"
GETTIME()
MSGBOX("今日は" + day[G_TIME_WW] + "です")

今日が何曜日なのか文字列で表示してみた

 

明日の曜日を求める方法その1

DIM day[] = "日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"
GETTIME(1)
MSGBOX("明日は" + day[G_TIME_WW] + "です")

明日が何曜日なのか文字列で表示させてみた

 

明日の曜日を求める方法その2

DIM day[] = "日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"
GETTIME()
MSGBOX("明日は" + day[((G_TIME_WW + 1) MOD 7)] + "です")

 

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の文字型

 

現在の日付と時刻を取得する方法

現在の日付や時刻を取得するためにはGETTIME関数を使用します。

この命令が実行されると特殊変数に時刻や時間のデータが代入されます。 後は必要に応じて各変数を利用しましょう。

 

現在の日付と時刻を表示するサンプル

現在の日付と時刻を表示するサンプルです。<#CR>は改行させるために使用しています。

GETTIME()
date = "" + G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
time = "" + G_TIME_HH2 + ":" + G_TIME_NN2
MSGBOX(date + "<#CR>" + time)

実行した場合の画面

 

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の文字型